本人对consul比较熟悉,用它来做例子

consul agent -dev
package main

import (
    "fmt"
    "log"

    "github.com/spf13/viper"
    _ "github.com/spf13/viper/remote"
)

func main() {
    v := viper.New()
    v.AddRemoteProvider("consul", "localhost:8500", "config")
    v.SetConfigType("json") // Need to explicitly set this to json
    if err := v.ReadRemoteConfig(); err != nil {
          log.Println(err)
          return
    }

    fmt.Println("获取配置文件的port", v.GetInt("port"))
    fmt.Println("获取配置文件的mysql.url", v.GetString(`mysql.url`))
    fmt.Println("获取配置文件的mysql.username", v.GetString(`mysql.username`))
    fmt.Println("获取配置文件的mysql.password", v.GetString(`mysql.password`))
    fmt.Println("获取配置文件的redis", v.GetStringSlice("redis"))
    fmt.Println("获取配置文件的smtp", v.GetStringMap("smtp"))
}