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)
}
関連
なし。