【问题标题】:Requiring a positional argument with go-flags需要带有 go-flags 的位置参数
【发布时间】:2026-01-01 17:30:01
【问题描述】:

我正在用 go 编写一个 CLI 工具,并选择 github.com/jessevdk/go-flags 进行 CLI arg 解析。我正在尝试找出强制使用位置参数的最佳方法。目前,我有以下内容:

func main() {
    args, err := flags.Parse(&opts)
    if err != nil {
        panic(err)
    }

    if len(args) < 1 {
        panic("An s3 bucket is required")
    }
}

这可行,但不会显示帮助输出,就像标记为"required:true" 的标志一样。有没有办法通过手动调用“打印帮助”函数或设置所需数量的位置参数来复制该行为?

【问题讨论】:

    标签: go arguments command-line-interface


    【解决方案1】:

    使用 os.Args 会有帮助吗?例如:

    package main
    
    import (
        "fmt"
        "os"
    )
    
    const Usage = `Usage:
    %s one two
    `
    
    func main() {
    
        if len(os.Args) != 3 {
            fmt.Printf(Usage, os.Args[0])
            os.Exit(-1)
        }
    
        //run program
    }
    

    os.Args 保存命令行参数,以程序名称开头。

    https://play.golang.org/p/Le9EMxmw9k

    【讨论】: