为何docopt解析得到的--debug标志无法直接用于Go的if语句?
为何docopt解析得到的--debug标志无法直接用于Go的if语句?
我最近在用docopt来实现一个简单的--debug命令行标志,结果遇到了个小问题。先给大家看段示例代码:
package main import ( "fmt" "github.com/docopt/docopt-go" ) var usage string = ` Usage: demo-cli [--debug] Options: --debug Turn on debug logging ` func main() { opts, _ := docopt.ParseDoc(usage) fmt.Printf("Type: %T\n", opts["--debug"]) if opts["--debug"] { fmt.Println("Debug enabled") } else { fmt.Println("Normal logging") } }
这段代码里的if opts["--debug"]会报错,不过我找到了几种能让它正常工作的办法(哈,双关了),也好奇大家会怎么处理:
- 直接和true比较:
if opts["--debug"] == true - 直接把值强制转换成bool类型:
if opts["--debug"].(bool) - 用docopt官方推荐的辅助函数:
debug, _ := opts.Bool("--debug")
我搞不懂的是,明明通过fmt.Printf()打印出来的opts["--debug"]类型是bool,为什么不能直接在if语句里用它做判断呢?
备注:内容来源于stack exchange,提问作者Fragment
相关产品推荐
相关产品推荐

