JSON から逆シリアル化した後に特定の構造体型へのインターフェイスをアサートしようとすると、エラーが発生します:
panic: interface conversion: interface {} is map[string]interface {}, not main.Data
この問題は、アサーションが互換性のない型に対して行われているために発生します。インターフェイスは、元々その型の値が割り当てられていた場合にのみ、その型に変換できます。
提供されたコードでは、インターフェイス anInterface にデータ構造体 AData の値が割り当てられます。したがって、anInterface は安全に Data にアサートできます。
type Data struct { Content string Links []string } func main() { var AData, AData2 Data var anInterface interface{} // populate data AData.Content = "hello world" AData.Links = []string{"link1", "link2", "link3"} anInterface = AData AData2 = anInterface.(Data) }
逆に、インターフェース anInterface にタイプ map[string]interface{} の値が割り当てられた場合、Data にアサートすることはできません。
JSON データを Data 構造体に直接逆シリアル化するには、json.Unmarshal() 関数を使用します。
var AData2 Data err = json.Unmarshal([]byte(value), &AData2) if err != nil { panic(err) }
以上がJSON 逆シリアル化中にインターフェイス アサーションが失敗するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。