go语言读取配置文件

2022-02-07  本文已影响0人  东南枝下

一些需要根据不同环境动态调整的信息需要写在配置文件中,go语言读取配置文件的方法有多种,以下介绍两种。

mkdir configs
touch config.yml

config.yml 文件

BaiduTranslate:
  BaiduAppId: BaiduAppId
  BaiduSecretKey: BaiduSecretKey

使用viper读取配置文件

  1. 引入依赖
go get -u github.com/spf13/viper@v1.4.0
  1. 使用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文件

  1. 拉取go-bindata
go get -u github.com/go-bindata/go-bindata/...

此时在 $GOPATH/bin下有一个名为go-bindata的可执行文件

  1. 编译配置文件
go-bindata -o configs/config.go -pkg=configs configs/

生成一个go文件,configs/config.go

  1. 拉取yaml文件解析工具

解析配置文件中的配置需要一个yaml解析工具

go get -u gopkg.in/yaml.v2
  1. 读取文件,解析配置
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

上一篇 下一篇

猜你喜欢

热点阅读