猿问

docopt.go 奇怪的错误信息

使用 docopt.go 重构旧项目并最小化代码程序如下所示


package main


import (

    "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 string


goroutine 1 [running]:

main.main()

    /Users/jburns/Development/Gopath/src/github.com/nyumal/serve/serve.go:31 +0x148


goroutine 2 [runnable]:

runtime.forcegchelper()

    /usr/local/Cellar/go/1.4.1/libexec/src/runtime/proc.go:90

runtime.goexit()

    /usr/local/Cellar/go/1.4.1/libexec/src/runtime/asm_amd64.s:2232 +0x1


goroutine 3 [runnable]:

runtime.bgsweep()

    /usr/local/Cellar/go/1.4.1/libexec/src/runtime/mgc0.go:82

runtime.goexit()

    /usr/local/Cellar/go/1.4.1/libexec/src/runtime/asm_amd64.s:2232 +0x1


goroutine 4 [runnable]:

runtime.runfinq()

    /usr/local/Cellar/go/1.4.1/libexec/src/runtime/malloc.go:712

runtime.goexit()

    /usr/local/Cellar/go/1.4.1/libexec/src/runtime/asm_amd64.s:2232 +0x1

exit status 2

并运行go run ./serve.go --port 5000它返回相同的东西但是运行go run ./serve.go --port 5000 .返回


Usage:

    serve [--port] <dir>

    serve help | --help

    serve --version

exit status 1

我哪里做错了?


慕妹3242003
浏览 216回答 1
1回答

慕雪6442864

您需要为端口声明一个参数:const Usage = `Usage:&nbsp; &nbsp; serve [--port=<arg>] <dir>&nbsp; &nbsp; serve help | --help&nbsp; &nbsp; serve --version&nbsp;Options:&nbsp; &nbsp; -p, --port=<arg> port for the sever to listen on&nbsp; &nbsp; -h, --help&nbsp; &nbsp; &nbsp; &nbsp;display help information&nbsp; &nbsp; -v, --version&nbsp; &nbsp; display Version使用二值类型断言来处理未设置端口的情况:port, ok := args["--port"].(string)if ok {&nbsp; &nbsp;// port is set}另外,从地图键周围删除“[]”。
随时随地看视频慕课网APP

相关分类

Go
我要回答