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)
}

関連

なし。