TOMLをGolangで読み込もうとして躓いた話

2020/02/03

GolangでTOMLファイルに書かれた設定を読み込もうした時に躓いたのでメモを残しておきます。

※TOMLファイルについては、公式ドキュメントに日本語訳があるのでここでは省略します。
https://github.com/toml-lang/toml/blob/master/versions/ja/toml-v0.5.0.md

TOMLを読み込むのは以下のライブラリを使用しています。
https://github.com/BurntSushi/toml
焼き寿司🔥🍣…?

今回は例として、以下のTOMLファイルを読み込もうとします。

[API]
user = "foresuke"
version = "v0.0.1"
debug  = true
limit = 500

失敗例

このコードを実行したところ、以下のような結果になりました。
エラーにはなっていませんが、TOMLの内容が読み込まれていません。

$ go run main1.go 


false
0

TOMLでは、複数のキー/バリューの組み合わせを纏めたものをテーブルと呼びます。
角括弧([])で囲まれた文字がテーブル名となり、その下に書かれたキー/バリューがテーブルに含まれる要素になります。
今回の例ではAPIというテーブル名の中にuserversiondebuglimitという要素が存在することになります。

解決策

こんな感じにTOML全体を表すConfigとAPIテーブルを表すAPIという構造体を個別に用意したところ、問題なくTOMLの内容を読み込むことが出来ました。

$ go run main2.go 
foresuke
v0.0.1
true
500

(あまり)よくない解決策

テーブルを使わないようにTOMLファイルを書き換えれば、main1.goでも値を取得することが出来ます。
ただ記載する項目が多い場合にはキーの重複が考えられるので実用的ではありません。

user = "foresuke"
version = "v0.0.1"
debug  = true
limit = 500
Golang

Human Fall FlatとSteam Remote Play Together

渋谷落語を観てきました