是否可以隐藏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。:如果你不理解我的问题,我可以改写。
答案 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()
}