KDOC 444: デコード時の未知のキー混入を防ぐ
この文書のステータス
- 作成
- 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) }
関連
なし。