隐藏 golang 消息

Hide golang messages

是否可以隐藏 golang 消息?我给你举个例子:

package main

import (
    "flag"
    "fmt"
    "os"
)

var signal = flag.String("z", "", "")

func main() {

    flag.Usage = func() {
        fmt.Printf("Usage: kata -z <command>\n\n")
        fmt.Printf("    test\tTesting\n")
        fmt.Printf("    version\tVersion\n")
        fmt.Println("")
    }

    flag.Parse()
    if len(os.Args) != 3 {
        flag.Usage()
        os.Exit(1)
    }

    switch *signal {
    case "test":
        fmt.Println("testing...")
    case "version":
        fmt.Println("0.0.1")
    default:
        fmt.Println("incorrect...")
    }
}

此应用向用户显示以下信息: https://play.golang.org/p/oYwADdmlAJ

但是如果我在命令行写kata -flag,系统returns:flag needs an argument:flag provided but not defined:以及我之前给你看的信息

我想知道是否可以隐藏 golang 消息?

P.S.: 如果你不明白我的问题,我可以改一下。

我找到了解决方案:

之前:

flag.Parse()
if len(os.Args) != 3 {
    flag.Usage()
    os.Exit(1)
}

现在:

if len(os.Args) != 3 || os.Args[1] != "-z" {
    flag.Usage()
    os.Exit(1)
} else {
    flag.Parse()
}

使用 flag 中的全局函数实际上传递给名为 flag.CommandLine 的全局 flag.FlagSet。在内部,这会将错误打印到输出,默认情况下是 stderr。您可以通过将其显式设置为 ioutil.Discard:

来抑制消息
flag.CommandLine.SetOutput(ioutil.Discard)
flag.Parse()

这将丢弃 flag.Parse() 内部输出的所有消息。您还可以通过传递适当的 io.Writer.

将其记录到您选择的任何其他地方