Go Yaml - yaml 파일을 GO로 쉽게 읽기
- 프로그램의 외부 시스템이 변경하게 되면 이를 적용해야 하는데, 코드에 그대로 반영할 수는 없으니 외부 설정 파일을 생성해서 이를 읽어 시스템에 반영
- 예를 들어, DB 서버의 ip 주소나 포트 같은 것들을 매번 코드상에서 변경해주는건 이상하니 전역으로 config 변수를 설정해서 주입해주는 것
- 이러한 외부 설정 파일은 yaml, json 형식으로 작성
- 이미 만들어져있는 yaml 파일은 다음과 같음
database:
Type: mysql
User: Riverandeye
Password: hello
Host: 1.2.3.4:5
Name: todo
TablePrefix: todo_
server:
RunMode: debug
HTTPPort: 4000
ReadTimeout: 60
WriteTimeout: 60
// DatabaseConfig Type
type DatabaseConfig struct {
Type string `yaml:"Type"`
User string `yaml:"User"`
Password string `yaml:"Password"`
Host string `yaml:"Host"`
Name string `yaml:"Name"`
TablePrefix string `yaml:"TablePrefix"`
}
// ServerConfig Type
type ServerConfig struct {
RunMode string `yaml:"RunMode"`
HTTPPort string `yaml:"HTTPPort"`
ReadTimeout int `yaml:"ReadTimeout"`
WriteTimeout int `yaml:"WriteTimeout"`
}
// Config Type
type Config struct {
Database DatabaseConfig `yaml:"database"`
Server ServerConfig `yaml:"server"`
}
-
전체 yaml에 대한 타입은 Config 이고, 각 Database, Server에 대한 타입을 분리하여 작성
-
yaml 설정파일로 만들어주기
- 타입을 명시한 후엔, ioutil으로 파일을 읽은 후 yaml 모듈로 Unmarshal
filename, _ := filepath.Abs("config/config.yml")
yamlFile, err := ioutil.ReadFile(filename)
var config Config
err = yaml.Unmarshal(yamlFile, &config)
if err != nil {
panic(err)
}