读取配置文件的,有toml和vipper两种好用的方法,toml的方法见:
​ 最大的特点就是要为配置文件构建相对应的结构体,有点囧,现在讲一个vipper。

config.go

package config

import (
"fmt"
"github.com/fsnotify/fsnotify"
"github.com/fwhezfwhez/errorx"
"os"
"sync"

"github.com/spf13/viper"
)

var config *viper.Viper
var m sync.Mutex
// Init 初始化配置
func init() {
var env string
if env = os.Getenv("ENV"); env=="" {
env = "dev"
}
v := viper.New()
v.SetConfigType("yaml")
v.SetConfigName(env)
v.AddConfigPath("../config/")
v.AddConfigPath("config/")
ReadConfig(v)
v.WatchConfig()
v.OnConfigChange(func(e fsnotify.Event) {
fmt.Println("Config file changed:", e.Name)
})

config = v
}

// GetConfig 获取配置
func GetConfig() *viper.Viper {
return config
}

func ReadConfig(v *viper.Viper) error{
m.Lock()
defer m.Unlock()
err := v.ReadInConfig()
if err != nil {
return errorx.NewFromString("Error on parsing config file!")
}
return nil
}

config_test.go

package config

import (
"testing"
)

func TestGetConfig(t *testing.T) {
c := GetConfig()
addr := c.GetString("addr")
fmt.Println(addr)

host := c.GetString("db.host")
fmt.Println(host)
time.Sleep(20 * time.Second)
// 这时候去修改 dev.yaml
}

在二者的同级目录下:
dev.yaml

addr: :8090
debugPort: :8091
db:
host: localhost
port: 5432

执行config_test 文件:

=== RUN   TestGetConfig
:8090
localhost
Config file changed: G:\go_workspace\GOPATH\src\cdd-platform-srv\config\dev.yaml