如果一个源码文件声明属于main包,并且包含一个无参数声明且无结果声明的 main 函数,那么它就是命令源码文件。
package main
import "fmt"
func main(){
fmt.Println("Hello, world!")
}
根据运行程序时根据给定的参数问候某人:
package main
import (
"flag" // 接收和解析命令参数
"fmt"
)
var name string
func init(){
/*
第 1 个参数为存储改命令参数值的地址
第 2 个参数指定命令参数的名称
第 3 个参数指定在未追加该命令参数时的默认值
第 4 个参数为该命令参数的简短说明,打印命令时用到
*/
flag.StringVar(&name, "name", "everyone", "The greeting object.")
}
func main(){
flag.Parse(); // 解析命令参数
fmt.Printf("Hello, %s!\n", name)
}
运行:
go run demo2.go -name="Robert"
结果:
Hello, Robert!
查看参数说明:
go run demo2.go --help
结果:
Usage of ./demo2:
-name string
The greeting object. (default "everyone")
自定义命令源码文件的参数使用说明:
package main
import (
"flag" // 接收和解析命令参数
"fmt"
"os"
)
var name string
func init(){
// ExitOnError:当命令后跟--help或者参数设置不正确时
// 在打印命令参数使用说明后以状态码2结束当前程序
flag.CommandLine = flag.NewFlagSet("", flag.ExitOnError)
flag.CommandLine.Usage = func(){
fmt.Fprintf(os.Stderr, "Usage of %s:\n", "question")
flag.PrintDefaults()
}
/*
第 1 个参数为存储改命令参数值的地址
第 2 个参数指定命令参数的名称
第 3 个参数指定在未追加该命令参数时的默认值
第 4 个参数为该命令参数的简短说明,打印命令时用到
*/
flag.StringVar(&name, "name", "everyone", "The greeting object.");
}
// 根据运行程序时给定的参数问候某人
func main(){
flag.Parse() // 解析命令参数
fmt.Printf("Hello, %s!\n", name)
}
运行:
go run demo3.go --help
结果:
Usage of question:
-name string
The greeting object. (default "everyone")
exit status 2