我想在Golang中为使用显示创建一个外部函数,但我不知道如何调用flag变量。这是我的实际代码:
package main
import (
"flag"
"fmt"
"os"
)
func Usage() {
if ArgSend {
fmt.Printf("Usage: SEND")
flag.PrintDefaults()
os.Exit(0)
} else if ArgTest {
fmt.Printf("Usage: -test")
flag.PrintDefaults()
os.Exit(0)
} else if ArgMacro {
fmt.Printf("Usage: -macro")
os.Exit(0)
} else {
fmt.Printf("Usage of: <-test|-send|-macro>\n")
os.Exit(0)
}
}
func main() {
//defaults variables
ArgTest, ArgSend, ArgMacro := false, false, false
// Args parse
flag.BoolVar(&ArgTest, "-test", false, "run test mode")
flag.BoolVar(&ArgSend, "-send", false, "run send mode")
flag.BoolVar(&ArgMacro, "-macro", false, "run macro mode")
flag.Parse()
Usage()
}
返回此错误:
F:\dev\GoLang\gitlab\EasySend\tmp>go run stackoverflow.go -test
# command-line-arguments
.\stackoverflow.go:10:5: undefined: ArgSend
.\stackoverflow.go:15:12: undefined: ArgTest
.\stackoverflow.go:20:12: undefined: ArgMacro
如果ArgSend为true / false,我如何检查标记解析?
答案 0 :(得分:0)
您的示例中存在一些错误:
这里有一个很好的示例:golang flags example您应该检查godocs on flags,特别是默认行为和自定义使用功能,如果您在修改示例时遇到问题,请再次询问
<强>更新强> 对不起,正如彼得在评论中指出的那样,我的回答有些混乱和错误。
澄清,在&#34; golang标志示例中提供的示例&#34;链接给定flag.Bool使用。使用flag.Bool时返回一个指针。
在问题中,您使用flag.BoolVar,它允许您引用bool值。你在问题中使用flag.BoolVar实际上是正确的。
所以你需要做的就是解决范围问题,不清楚你在尝试用你的用法做什么,但这是一个应该澄清的工作例子:
注意:在此示例中,标志变量可能保留在main中,因为在Usage函数中不需要它们
package main
import (
"flag"
"fmt"
"os"
)
func Usage() {
// custom usage (help) output here if needed
fmt.Println("")
fmt.Println("Application Flags:")
flag.PrintDefaults()
fmt.Println("")
}
var ArgTest, ArgSend, ArgMacro bool
func main() {
// Args parse
flag.BoolVar(&ArgTest, "test", false, "run test mode")
flag.BoolVar(&ArgSend, "send", false, "run send mode")
flag.BoolVar(&ArgMacro, "macro", false, "run macro mode")
flag.Parse()
// assign custom usage function (will be shown by default if -h or --help flag is passed)
flag.Usage = Usage
// if no flags print usage (not default behaviour)
if len(os.Args) == 1 {
Usage()
}
fmt.Printf("ArgTest val: %t\n", ArgTest)
fmt.Printf("ArgSend val: %t\n", ArgSend)
fmt.Printf("ArgMacro val: %t\n", ArgMacro)
}