golang flag 包子命令如何确定实际输入的 flag?

例如 fooCmd 子命令有多个 flag

fooCmd := flag.NewFlagSet("foo", flag.ExitOnError)
fooA := fooCmd.String("a", "0", "a")
fooB := fooCmd.String("b", "0", "b")
// ... flag 可以有多个

fooCmd.Parse(os.Args[2:])

// 如何判断?
if 仅有 a flag {
    A()
} else if 仅有 b flag {
    B()
} else if 同时有 a 和 b {
    AB()
} else {
    X()
}

实际调用

> go run test.go foo
X()
> go run test.go foo -a 10
A()
> go run test.go foo -a 10 -b 20
AB()

https://segmentfault.com/q/1010000038899417