yikegaya’s blog

仕事関連(Webエンジニア)と資産運用について書いてます

GoでDBの接続情報をyamlに切り出した時のメモ

Goで作ったサービスで環境ごとにDBの接続先を切り替えたいと思ってこんな感じ↓でyamlに書いた接続情報を読み込んだ時のメモ。

driver: mysql
development:
  user: root
  password: "pass"
  protocol: "tcp(movie_mysql:3306)"
  db_name: "movie_info"

これがベストかいまいちわからないんだけど割と面倒なコードになった。

// まずgopkgからライブラリを読み込む
import (
    "gopkg.in/yaml.v2"
)
 bufとしてyamlを読み込む
  buf, err := ioutil.ReadFile("/workspace/golang_backend/db/db_connect.yml")
  if err != nil {
      log.Fatal(err)
  }

  var m map[string]interface{}
 // yamlをmap形式に変換
  err = yaml.Unmarshal([]byte(buf), &m)
  if err != nil {
      log.Fatal(err)
  }

  DBMS     := "mysql"
  USER     := m["development"].(map[interface {}]interface {})["user"].(string)
  PASS     := m["development"].(map[interface {}]interface {})["password"].(string)
  PROTOCOL := m["development"].(map[interface {}]interface {})["protocol"].(string)
  DBNAME   := m["development"].(map[interface {}]interface {})["db_name"].(string)

ネストした値はmap[interface {}]interface {}といった型になっているらしくその型でとってきてさらにstringに直さないと使えなかった。

普段Rubyとか使ってるとドットでつなげば取れるんで違和感強いけど、Goとかシステムプログラミング言語(C++とかRust)書いてる人からすればこういうもんでしょ。って感じなのだろうか。