隐藏 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
.
将其记录到您选择的任何其他地方
是否可以隐藏 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
.