一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第7天,点击查看活动详情。
前言
本瞎写脚本专题主要是记录使用 golang 一些问题和思考,当然也会将一部分隐私的部分屏蔽掉,只给出一小部分的内容。
- 01- 项目搭建
- 02- 配置文件
问题列表
1、配置文件
- 创建 config.yaml 的配置文件,并增加配置项内容
server:
name: yx-script
dingTalk:
url: http://xxx.xxx.xxx
clientId: 222eee
secret: 11244444
- 创建一个与配置文件内的配置项对应的 struct
type YxConfig struct {
Server struct {
Name string 'ymal:"name"'
}
DingTalk struct {
Url string 'ymal:"url"'
ClientId string 'ymal:"clientId"'
ClientSecret string 'ymal:"clientSecret"'
}
}
- 对于配置文件的内容,可以在项目启动的事情进行全局初始化
var yxConfig YxConfig
func init() {
configFile, err := ioutil.ReadFile("config/yxx-config.yaml")
if err != nil {
panic("读取配置文件失败")
}
err = yaml.Unmarshal(configFile, &yxConfig)
if err != nil {
panic("解析失败")
}
fmt.Printf("地址是 %v", yxConfig.DingTalk.url)
}
2、指定配置文件
工程化项目时,将配置文件放置在 /config 目录下,且在代码中硬编码文件的路径。但是,经常开发,测试,预发,正式都会有好几个环境,配置文件的内容都会不相同的。总不可能每次都修改配置文件的路径。
解决方法:指定配置文件
使用 Golang 的标准库提供了 flag 包来处理命令行参数
filePath := flag.String(name, value , usage)
flag.Parse()
- flag.String(name , value , usage) ,其中 name 是命令参数,value 是默认值,usage 是参数说明
- flag.Parse 是 命令行参数解析到定义的flag
3、init 函数 和 main 函数
init 函数是在程序启动前对包的初始化的函数。允许每个包有多个 init 函数,包的每个源文件也允许有多个 init 函数。多个 init 的执行顺序,在 golang 中没有明确说明,但是肯定是根据引用包的顺序,依次执行每个包的 init 函数。
init 函数不能被调用使用,都是在 main 函数执行之前被自动调用。所以,可以将配置文件的初始化放在 init 函数内,这样就可以在项目启动时 先读取配置,再进入 main 函数
main 函数与 init 函数的区别就是,mian 函数只能用于 main 包中,有且仅能定义一个。
func init() {
// something to do
}
func main(){
// something to do
}