Goは静的型付け言語ですが、何でもありな型を定義できます。
空インターフェース例
以下は空インターフェースを使用して異なる型を使用している例になります。見ての通り、intでもstringでも変数に値を代入する事ができます。
package main
import (
"fmt"
)
func main() {
var i interface{}
i = 1
fmt.Println(i) // 1 が表示される
i = "イチ"
fmt.Println(i) // "イチ" が表示される
i = []string{"イチ", "ニ"}
fmt.Println(i) // ["イチ" "ニ"] が表示される
}
利用例
ファイル読みのように型が不明な場合、空インターフェースが使用される事があるようです。
{
"Name": "sample_name",
"Events": [
{
"Age": 18
}
]
}
package main
import (
"encoding/json"
"fmt"
"os"
)
func main() {
data := map[string]any{}
// ファイル読み込み
f, err := os.Open("sample.json")
if err != nil {
return
}
// デコード
json.NewDecoder(f).Decode(&data)
// 結果を表示
fmt.Println(data) // map[Events:[map[Age:18]] Name:sample_name] が表示される
}