使用 docopt.go 重构旧项目并最小化代码程序如下所示package mainimport ( "fmt" "github.com/docopt/docopt.go")const Version = `2.0`const Usage = `Usage: serve [--port] <dir> serve help | --help serve --version Options: -p, --port port for the sever to listen on -h, --help display help information -v, --version display Version`func check(err error) { if err != nil { panic(err) }}func main() { args, err := docopt.Parse(Usage, nil, true, Version, false) check(err) port := args["[--port]"].(string) fmt.Println(args) fmt.Println(port)v}然而,当我运行程序go run ./serve.go help期待帮助消息时,我得到了这个panic: interface conversion: interface is nil, not stringgoroutine 1 [running]:main.main() /Users/jburns/Development/Gopath/src/github.com/nyumal/serve/serve.go:31 +0x148goroutine 2 [runnable]:runtime.forcegchelper() /usr/local/Cellar/go/1.4.1/libexec/src/runtime/proc.go:90runtime.goexit() /usr/local/Cellar/go/1.4.1/libexec/src/runtime/asm_amd64.s:2232 +0x1goroutine 3 [runnable]:runtime.bgsweep() /usr/local/Cellar/go/1.4.1/libexec/src/runtime/mgc0.go:82runtime.goexit() /usr/local/Cellar/go/1.4.1/libexec/src/runtime/asm_amd64.s:2232 +0x1goroutine 4 [runnable]:runtime.runfinq() /usr/local/Cellar/go/1.4.1/libexec/src/runtime/malloc.go:712runtime.goexit() /usr/local/Cellar/go/1.4.1/libexec/src/runtime/asm_amd64.s:2232 +0x1exit status 2并运行go run ./serve.go --port 5000它返回相同的东西但是运行go run ./serve.go --port 5000 .返回Usage: serve [--port] <dir> serve help | --help serve --versionexit status 1我哪里做错了?
1 回答

慕雪6442864
TA贡献1812条经验 获得超5个赞
您需要为端口声明一个参数:
const Usage = `
Usage:
serve [--port=<arg>] <dir>
serve help | --help
serve --version
Options:
-p, --port=<arg> port for the sever to listen on
-h, --help display help information
-v, --version display Version
使用二值类型断言来处理未设置端口的情况:
port, ok := args["--port"].(string)
if ok {
// port is set
}
另外,从地图键周围删除“[]”。
- 1 回答
- 0 关注
- 215 浏览
添加回答
举报
0/150
提交
取消