当我在下面运行代码时
package main
import (
"flag"
"fmt"
)
func main() {
i := flag.Int("i", 0, "Any integer value")
b := flag.Bool("b", false, "Any boolean value")
s := flag.String("s", "Hello", "Any string value")
flag.Parse()
fmt.Println("-i", *i)
fmt.Println("-b", *b)
fmt.Println("-s", *s)
}
go run main.go -i 33 -b true -s hi
-i 33
-b true
-s Hello
go run main.go -i 33 -s hi
-i 33
-b false
-s hi
go run main.go -i 33 -s hi -b true
-i 33
-b true
-s hi
go run main.go -i 33 -b true -s hi
-i 33
-b true
-s Hello
为什么“-s”命令行参数在最后通过时不起作用
提前致谢
最佳答案
这是因为 -b
bool 标志。 bool 标志测试标志的存在,它不测试标志的参数。那是:
go run main.go -b
将输出
-b true
, 和go run main.go
将输出
-b false
.go run main.go -b false
将输出
-b true
, 因为 -b
给出了标志。 false
不是一个公认的论点,所以它在那里停止处理。如果你想使用
true
/false
,你必须使用这种格式:go run main.go -i 33 -b=false -s hi
这也应该有效(这里,
-b
是 true
):go run main.go -i 33 -b -s hi
关于golang命令行参数解析问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60081168/