ホームページ > バックエンド開発 > Golang > JSON 逆シリアル化中にインターフェイス アサーションが失敗するのはなぜですか?

JSON 逆シリアル化中にインターフェイス アサーションが失敗するのはなぜですか?

Patricia Arquette
リリース: 2024-11-24 15:32:16
オリジナル
651 人が閲覧しました

Why does interface assertion fail during JSON deserialization?

JSON 逆シリアル化中にインターフェイス アサーションが失敗する

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート