golang命令行参数解析问题

标签 go

当我在下面运行代码时

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

这也应该有效(这里, -btrue ):
go run main.go -i 33 -b -s hi

关于golang命令行参数解析问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60081168/

相关文章:

go - 保存类型以供以后反射

go - Doom Emacs 中对 golang 的完整 IDE 功能支持

json - Go 中带有 JSON Marshal 的小写 JSON 键名

go - 为什么多个sql查询按顺序运行而不是同时运行?

go - kubernetes 客户端去 : convert labelselector to label string

amazon-web-services - 无法使用 &cfg(*aws.Config 类型的值)作为 session.NewSession 参数中的 *aws.Config 值

inheritance - 在结构中嵌入两个同名的结构

go - 如何在 GO 编程的特定索引处更改 byte[] 中的某些字节?

Go Modules - 如何引用 GitHub 中的分支

arrays - 解码 json 可选元素 Golang