Golang 라 이브 러 리 - viper 설정 파일 읽 기

12670 단어 Golanggo.golang
/ 머리말 /
viper 는 Steve Francia 가 작성 한 오픈 소스 설정 솔 루 션 이자 cobra 의 작성 자 입 니 다. viper 의 기능 을 살 펴 보 겠 습 니 다.
  • JSON, TOML, YML / YML, PROPERTIES, ENVFILE 등 파일 읽 기 지원
  • 파일 을 읽 는 키 데이터 수정
  • 설정 파일 의 수정 을 감청 하고 자동 으로 다시 불 러 오기
  • 다운로드 하 다.
    go get github.com/spf13/viper
    

    GitHub 주소
    / 1 / 프로필 읽 기
    설정 파일 을 읽 는 중 집중 사용 방식 을 보 여 줍 니 다 viper.
    우 리 는 .yml 서 류 를 예 로 들 었 다.config.yml
    user:
      name: "wise"
      age: 18
    
    config.go
    package config
    
    import (
    	"fmt"
    	"github.com/spf13/viper"
    )
    
    
    //                  ,               config.yml  
    //var filePath = "../test/config.yml"
    var filePath = "config.yml"
    
    var cfg = Config{}
    
    //        ,                               
    //    
    type Config struct {
    	UserInfo struct{
    		Name string `mapstructure:"name"`
    		Age string   `mapstructure:"age"`
    	} `mapstructure:"user"`
    }
    
    //    
    type Config struct {
    	 User UserInfo `mapstructure:"user"`
    }
    UserInfo struct{
    	Name string  `mapstructure:"name"`
    	Age  int     `mapstructure:"age"`
    }
    
    func LoadConfig() {
    	//         
    	viper.SetConfigType("yml")
    	viper.SetConfigFile(filePath)
    
    	//       
    	err := viper.ReadInConfig()
    	if err != nil {
    		fmt.Println("        ,      : ", err)
    	}
    
    	//    viper     key value  ,        
    	fmt.Println(viper.Get("user.name"))
    	fmt.Println(viper.GetInt("user.age"))
    	
    	//   key    ,   true/false
    	fmt.Println(viper.IsSet("user.name"))
    	
    	//   key value ,      ,              
    	viper.Set("user.age",19)
    	
    
    	//            cfg   
    	err = viper.Unmarshal(&cfg)
    	if err != nil {
    		fmt.Println("        ,      : ", err)
    	}
    }
    
    //             
    func GetInfo() Config {
    	return cfg
    }
    

    테스트 코드config_test.go
    import (
    	"fmt"
    	"testing"
    )
    
    func TestGetInfo(t *testing.T) {
    	LoadConfig()
    	fmt.Println("name : ",GetInfo().UserInfo.Name)
    	fmt.Println("age : ",GetInfo().UserInfo.Age)
    }
    

    출력 정보
    name : wise age : 18
    위 에서 저희 가 사용 한 viper 의 기능 을 정리 해 보도 록 하 겠 습 니 다.
  • 대상 에서 직접 데 이 터 를 얻 을 수 있다
  • 대상 에서 데 이 터 를 직접 가 져 올 때 반환 형식 을 지정 할 수 있 습 니 다
  • 설정 파일 을 읽 기 전에 값 을 수정 할 수 있 고 우선 순위 가 가장 높 습 니 다
  • / 2 / 설정 파일 자동 업데이트
    설정 파일 을 자동 으로 업데이트 할 수 있 는 지 살 펴 보 겠 습 니 다.
    package main
    
    import (
    	"fmt"
    	"github.com/spf13/viper"
    	"time"
    )
    
    func main() {
    	viper.SetConfigType("yml")
    	viper.SetConfigFile("./test/config.yml")
    
    	err := viper.ReadInConfig()
    	if err != nil {
    		fmt.Println("read config is failed err:", err)
    	}
    
    	viper.WatchConfig()
    
    	fmt.Println("age : ", viper.GetInt("user.age"))
    	//        20s,          config.yml   age  
    	time.Sleep(time.Second * 20)
    	fmt.Println("age : ", viper.GetInt("user.age"))
    }
    

    출력 정보
    age : 18 age : 180
    두 번 인쇄 한 결과 같은 친구 들 은 수면 시간 을 좀 더 길 게 조절 해서 해 볼 수 있어 요.

    좋은 웹페이지 즐겨찾기