隐藏golang消息

时间:2017-06-09 15:19:16

标签: go flags 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中写字,系统将返回:flag needs an argument:flag provided but not defined:以及我之前向您展示的信息。

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

P.S。:如果你不理解我的问题,我可以改写。

2 个答案:

答案 0 :(得分:4)

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

来禁止显示消息
flag.CommandLine.SetOutput(ioutil.Discard)
flag.Parse()

这将放弃flag.Parse()内部输出的所有消息。您也可以通过传递适当的io.Writer将其记录到您选择的任何其他地方。

答案 1 :(得分:0)

我找到了一个解决方案:

在:

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()
}