golang viperプロファイル管理パッケージの使用

3123 ワード

1.インストール
go get github.com/spf13/viper

2.基本使用及び注意事項
config.tomlファイル、注意事項はプログラムコメントにあります
appname = "user_web77"

loglevel = "info"
port = 8089

[mysql]
ip = "192.168.56.19"
port = 3310
user = "root"
password = 123456
database = "cmp"

[redis]
ip = "192.168.56.101"
port = 6379

[rabbitmq]
ip = "192.168.56.101"
port = 5991

プログラム
package main

import (
    "fmt"
    "github.com/fsnotify/fsnotify"
    "github.com/spf13/viper"
    "log"
    "time"
)

type MysqlConfig struct{
    Ip string      //    
    Port string
    User string
    Password string
    Database string
}

type RedisConfig struct{
    Ip string
    Port string
}

type RabbitmqConfig struct{
    Ip string
    Port string
}

type Config struct{    //Config   config.toml      
    AppName string
    LogLevel string
    Port string
    Mysql MysqlConfig   //            ,          
    Redis RedisConfig
    Rabbitmq RabbitmqConfig
}

func main() {
    viper.AutomaticEnv()      //        
    viper.SetConfigName("config")  //        
    viper.SetConfigType("toml")   //    
    viper.AddConfigPath("./config/")  //      
    viper.SetDefault("redis.port",6379)  //     
    viper.SetDefault("kafka.port",6856)
    err := viper.ReadInConfig()  //  
    if err != nil {
        log.Fatalln("read config failed: %v",err)
    }
    viper.WatchConfig()     //                 viper.ReadInConfig  
    viper.OnConfigChange(func(e fsnotify.Event) { //             
        log.Printf("Config file:%s Op:%s
", e.Name, e.Op) }) log.Println(viper.GetString("appname")) // string log.Println(viper.GetString("log_level")) log.Println(viper.GetString("port")) fmt.Println("mysql ip:",viper.GetString("mysql.ip")) fmt.Println("mysql port:",viper.GetString("mysql.port")) fmt.Println("kafka port:",viper.GetString("kafka.port")) fmt.Println("GOPATH: ", viper.Get("GOPATH")) time.Sleep(time.Second) var config Config viper.Unmarshal(&config) for { log.Println(config.LogLevel) // log.Println(config.AppName) log.Println(config.Mysql.Ip) fmt.Println("mysql ip:",viper.GetString("mysql.ip")) // time.Sleep(time.Second * 5) } }

3.結果
2021/08/03 14:31:25 info
2021/08/03 14:31:25 user_web77
2021/08/03 14:31:25 192.168.56.138
mysql ip: 192.168.56.138
2021/08/03 14:31:28 Config file:C:\Users\admin\xiayuedu\golangdemo\config\config.toml Op:WRITE
2021/08/03 14:31:28 Config file:C:\Users\admin\xiayuedu\golangdemo\config\config.toml Op:WRITE
2021/08/03 14:31:30 info
2021/08/03 14:31:30 user_web77
2021/08/03 14:31:30 192.168.56.138
mysql ip: 192.168.56.19
2021/08/03 14:31:35 info
2021/08/03 14:31:35 user_web77
2021/08/03 14:31:35 192.168.56.138
mysql ip: 192.168.56.19