インターフェイスへのアンマーシャリングと型アサーションの実行
RabbitMQ システム経由でメッセージを受信し、型アサーションを実行する場合、次のことを理解することが重要ですJSONによってアンマーシャリングされる型package.
デフォルトのアンマーシャリング タイプ
デフォルトでは、json.Unmarshal は次の値を返します。型:
アンマーシャリングインターフェースへ{}
インターフェースへアンマーシャリングする場合{}、戻り値は汎用のマップ[文字列]インターフェース{}になります。マップ内の実際の型を決定するには、次のいずれかを行うことができます。
ラッパー構造体の使用例
手動で回避するにはデータを解凍する場合は、次のようなラッパー構造体の使用を検討してください。
type Unpacker struct { Data interface{} } func (u *Unpacker) UnmarshalJSON(b []byte) error { smth1 := &Something1{} err := json.Unmarshal(b, smth1) if err == nil & smth1.Thing != "" { u.Data = smth1 return nil } if _, ok := err.(*json.UnmarshalTypeError); err != nil & !ok { return err } smth2 := &Something2{} err = json.Unmarshal(b, smth2) if err != nil { return err } u.Data = smth2 return nil }
このラッパー構造体を使用すると、受信したデータのタイプに応じて、Something1 または Something2 にデータをアンマーシャリングできます。
以上がGo で JSON を「インターフェース」にアンマーシャリングした後、型アサーションを処理するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。