一些需要根据不同环境动态调整的信息需要写在配置文件中,go语言读取配置文件的方法有多种,以下介绍两种。
- 先创建一个配置文件
configs/config.yml
mkdir configs
touch config.yml
config.yml 文件
BaiduTranslate:
BaiduAppId: BaiduAppId
BaiduSecretKey: BaiduSecretKey
使用viper读取配置文件
- 引入依赖
go get -u github.com/spf13/viper@v1.4.0
- 使用viper读取配置
package setting
import (
"github.com/spf13/viper"
)
type SettingS struct {
BaiduTranslate BaiduTranslate `yaml:"BaiduTranslate"`
}
type BaiduTranslate struct {
BaiduAppId string `yaml:"BaiduAppId"`
BaiduSecretKey string `yaml:"BaiduSecretKey"`
}
func ReadSetting() (SettingS, error) {
var settingS SettingS
vp := viper.New()
vp.AddConfigPath("configs")
vp.SetConfigName("config-dev")
vp.SetConfigType("yml")
err := vp.ReadInConfig()
// 优先读取dev后缀的配置文件
if err != nil {
vp.SetConfigName("config")
err := vp.ReadInConfig()
if err != nil {
return settingS, err
}
}
err = vp.UnmarshalKey("BaiduTranslate", &settingS.BaiduTranslate)
if err != nil {
return settingS, err
}
return settingS, nil
}
使用viper可以读取当前可执行文件相对路径下的配置,也就是说配置不会和代码一起被编译进二进制文件中,在执行二进制文件的目录中依然得写入相同路径的配置文件
将配置文件编译入二进制文件中
要将配置文件编译进二进制文件,需要依赖工具go-bindata
将配置文件转化为一个go文件
- 拉取
go-bindata
go get -u github.com/go-bindata/go-bindata/...
此时在 $GOPATH/bin
下有一个名为go-bindata
的可执行文件
- 编译配置文件
go-bindata -o configs/config.go -pkg=configs configs/
生成一个go文件,configs/config.go
- 拉取yaml文件解析工具
解析配置文件中的配置需要一个yaml解析工具
go get -u gopkg.in/yaml.v2
- 读取文件,解析配置
package setting
import (
"gitee.com/jenson343/jtoolkit/configs"
"gopkg.in/yaml.v2"
)
type SettingS struct {
BaiduTranslate BaiduTranslate `yaml:"BaiduTranslate"`
}
type BaiduTranslate struct {
BaiduAppId string `yaml:"BaiduAppId"`
BaiduSecretKey string `yaml:"BaiduSecretKey"`
}
func ReadSetting() (SettingS, error) {
var settingS SettingS
config, err := configs.Asset("configs/config.yml")
if err != nil {
return settingS, err
}
err = yaml.Unmarshal(config, &settingS)
if err != nil {
return settingS, err
}
return settingS, nil
}
gitee: gitee.com/jenson343/jtoolkit
网友评论