• Home
  • About
    • Jiwon Jeong photo

      Jiwon Jeong

      끊임없이 배우며 성장하는 엔지니어

    • Learn More
    • Email
    • Github
  • Posts
    • All Posts
    • All Tags
    • All Categories
  • Projects

yaml 파일을 GO로 쉽게 읽기

14 Dec 2021

Reading time ~1 minute

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)
}


개발일기 Share Tweet +1