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)書いてる人からすればこういうもんでしょ。って感じなのだろうか。