KDOC 444: BurntSushi/tomlのUndecoded()で未知のキー混入を検出できる
この文書のステータス
- 作成
- 2025-10-06 貴島
- レビュー
- 2025-10-08 貴島
概要
JSONやTOMLなどの設定ファイルなどで、未対応のキーが指定されてもエラーを返さない場合、些細だが気づくのに時間を取る問題を発生させることがある。たとえば設定が反映されていないと思ったら大文字だった、など。検証するべきである。
少なくとも github.com/BurntSushi/toml には Undecoded() 関数があり、デコード時にデコードされなかった値を検証することで、想定していないキーが指定されたのを検証できる。
package main
import (
"fmt"
"os"
"github.com/BurntSushi/toml"
)
type Config struct {
Name string
Port int
}
func main() {
var cfg Config
meta, err := toml.Decode("Name = aaa\nPort = bbb", &cfg)
if err != nil {
panic(err)
}
// デコードされなかった値をチェックする。あったらエラーにする
if undecoded := meta.Undecoded(); len(undecoded) > 0 {
panic(fmt.Errorf("unknown keys found in TOML: %v", undecoded))
}
fmt.Printf("Loaded: %+v\n", cfg)
}
関連
抽象。
- 想定外の入力を黙って無視すると、問題の発見が遅れる
関連。
- 類推: 安全な開発ハック例を書く
- 類似: KDOC 365: GOTOOLCHAINがautoならtoolchainで指定したGoがダウンロードされる。指定が黙って無視される例