使用“flag”包时摆脱“提供标志但未定义”

Wan*_*pps 4 go command-line-arguments

我正在使用 go 制作一个 API 请求工具,并且想要使用“flag”包。
我已经使用定义了一个标志,flag.String但是当我输入一个不存在的标志时,
程序会打印“已提供但未定义的标志:{flag}”(其中{flag}是一个不存在的标志。)

我的代码是:

package main

import "fmt"
import "flag"
import "os"

func main() {
    // Set up command-line arguments
    apiRequestTool := flag.String("api", "", "")
    flag.Usage = func() {
        fmt.Fprintf(os.Stderr, "Usage: TestTestTest\n")
        os.Exit(1)
    }
    flag.Parse()
    
    // Check API URL value
    if *apiRequestTool == "" {
        fmt.Println("\"api\" Usage: --api [string]")
        os.Exit(1)
    }
}
Run Code Online (Sandbox Code Playgroud)

jub*_*0bs 5

flag.String诸如和 之类的函数flag.Parse*flag.FlagSet名为 的导出单例进行操作flag.CommandLine。抑制来自该标志集的所有错误消息的一种方法是将其输出转移到黑洞(例如在主函数的顶部),如下所示:

flag.CommandLine.SetOutput(io.Discard)
Run Code Online (Sandbox Code Playgroud)

之后,您认为烦人的错误消息将不会被打印:

$ go run main.go --whatever
Usage: TestTestTest
exit status 1
Run Code Online (Sandbox Code Playgroud)