Golang:未定义命令行参数:变量
我想为Golang中的用法显示创建一个外部函数,但我不知道如何调用flag变量。这是我的实际代码:Golang:未定义命令行参数:变量,go,Go,我想为Golang中的用法显示创建一个外部函数,但我不知道如何调用flag变量。这是我的实际代码: package main import ( "flag" "fmt" "os" ) func Usage() { if ArgSend { fmt.Printf("Usage: SEND") flag.PrintDefaults() os.Exit(0) } else if ArgTest {
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()
}
如果ArgSend为真/假,我如何检查标志解析?在您的示例中有两个错误:
- 您试图在usage函数中使用的变量不在范围内,因为您的所有标志变量都在main()中声明
- 标志变量本身的类型错误,应使用标志包中的类型
- 其他错误包括,在标志文本(第二个参数)前面添加“-”,以及未取消对标志变量的引用(它们将是指针)
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)
}
不要把flag.BoolVar和flag.Bool混淆。@Peter谢谢你的输入,我已经更新了答案,希望它能澄清问题
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)
}