使用 docopt.go 重構(gòu)舊項(xiàng)目并最小化代碼程序如下所示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}然而,當(dāng)我運(yùn)行程序go run ./serve.go help期待幫助消息時(shí),我得到了這個(gè)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并運(yùn)行g(shù)o run ./serve.go --port 5000它返回相同的東西但是運(yùn)行g(shù)o run ./serve.go --port 5000 .返回Usage: serve [--port] <dir> serve help | --help serve --versionexit status 1我哪里做錯(cuò)了?
1 回答

慕雪6442864
TA貢獻(xiàn)1812條經(jīng)驗(yàn) 獲得超5個(gè)贊
您需要為端口聲明一個(gè)參數(shù):
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
使用二值類型斷言來(lái)處理未設(shè)置端口的情況:
port, ok := args["--port"].(string)
if ok {
// port is set
}
另外,從地圖鍵周圍刪除“[]”。
- 1 回答
- 0 關(guān)注
- 256 瀏覽
添加回答
舉報(bào)
0/150
提交
取消