命令源码文件是程序的运行入口,是每个可独立运行的程
序必须拥有的。我们可以通过构建或安装,生成与其对应的可执行文件,后者一般会与该命令源码文件的直接父目录同名。
如果一个源码文件声明属于main包,并且包含一个无参数声明且无结果声明的main函数,那么它就是命令源码文件。
package main
import "fmt"
func main() {
fmt.Println("Hello, world!")
}
接收参数 & 自定义参数说明当需要模块化编程时,我们往往会将代码拆分到多个文件,甚至拆分到不同的代码包中。但无论怎样,对于一个独立的程序来说,命令源码文件永远只会也只能有一个。如果有与命令源码文件同包的源码文件,那么它们也应该声明属于main包。
我直接用一段代码来说明
package main
import
(
"flag"
"fmt"
"os"
)
var pwd string
var name string
func init()
{
flag.StringVar(&name,"name","admin","The is name.")
flag.StringVar(&pwd,"pwd","admin","The is pwd.")}
func main()
{
flag.Usage = func()
{
fmt.Fprintf(os.Stderr,"Usage of %s:\n","question")
flag.PrintDefaults()
}
flag.Parse()
fmt.Printf("name=%s , pwd=%s",name,pwd)}
}
执行结果:
帮助显示:
代码解析:
flag.StringVar(&name,"name","admin","The is name.")
函数flag.StringVar接受 4 个参数
第 1 个参数是用于存储该命令参数值的地址,具体到这里就是在前面声明的变量name的地址了,由表达式&name表示。
第 2 个参数是为了指定该命令参数的名称,这里是name。
第 3 个参数是为了指定在未追加该命令参数时的默认值,这里是everyone。
至于第 4 个函数参数,即是该命令参数的简短说明了,这在打印命令说明时会用到。
下面这种方式也与之上的相同,一种需要申明,一种直接接受值
var name = flag.String("name", "everyone", "The greeting object.")
flag.Parse()
函数flag.Parse用于真正解析命令参数,并把它们的值赋给相应的变量。如果没有使用该函数将不会赋值成功。
fmt.Fprintf(os.Stderr,"Usage of %s:\n","question")
该语句用于编写命令源码文件的参数使用说明,我们可以看到使用–help时的输出,就由该语句控制