一、为什么需要使用golang自定义命令行
不恰当的比喻,当我们写了一个服务代码后,按照简单的思维,我们会在业务代码中将要连接的数据库 用户名、主机名、端口号、密码写死。 那么也就意味着我们启动该服务后都只能固定连接某一个数据库,而如果我们将这些参数不用写死,通过启动服务命令行参数进行临时分配,那么我们也就不用去更改业务代码重新编译去执行了。
题外话:当然,除了自定义命令行来进行临时分配外,我们也可以通过在服务的业务代码中,实现在服务启动时,先去对应的配置文件中读取相关参数进行分配要连接的数据库,当然,我们要明白的是,golang的配置文件在代码编译的时候不会被编译进去。所以我们可以在运行编译好的服务源代码前修改跟随的配置文件。
二、golang自定义命令行参数如何实现
golang官方其实已经内置了flag包,让我们很方便的定义命令行参数。
简单的使用案列: 启动服务时,通过命令行给定某个用户的相关信息。
package main
import (
"flag"
"fmt"
)
func main() {
//定义变量
var (
name, sex, hobby string
age int
)
// StringVar函数 四个参数
// 第一个 接收值的变量地址(指针)
// 第二个 参数key -name -sex -hobby...
// 第三个 参数默认值 即对应key的value默认值
// 第四个 对参数的说明
flag.StringVar(&name,"name","","用户的名称") //接收name参数并分配给name
flag.IntVar(&age,"age",0,"用户的年龄") //接收age参数并分配给age
flag.StringVar(&sex,"sex","","用户的性别") //接收sex参数并分配给sex
flag.StringVar(&hobby,"hobby","","用户的爱好") //接收hobby参数并分配给hobby
//执行转换
flag.Parse()
//打印变量,查看各变量接收到的对应参数
fmt.Printf("name=%v age=%v sex=%v hobby=%v\n",
name, age, sex, hobby)
}
执行结果如下:
根据执行结果可以知道:
1.启动命令中的参数顺序与业务代码中的分配变量的顺序可以不用一致,只要key与value 与业务代码变量名对应即可
2.命令行参数名与值之间可以用 = 号 也可以用空格隔开 两种形式都可以