ホームページ  >  記事  >  バックエンド開発  >  既知の型をスイッチの型パラメータへのポインタに変換するにはどうすればよいですか?

既知の型をスイッチの型パラメータへのポインタに変換するにはどうすればよいですか?

王林
王林転載
2024-02-09 11:30:18964ブラウズ

既知の型をスイッチの型パラメータへのポインタに変換するにはどうすればよいですか?

php editor Banana は、既知の型をスイッチの型パラメータへのポインタに変換する方法を紹介します。プログラミングでは、プログラム内でより柔軟な操作を行うために、既知の型の変数をポインターに変換する必要がある場合があります。この変換は、「&」演算子を使用して実現できます。変数名の前に「&」演算子を付けて、変数へのポインタに変換します。このようにして、変数を単に代入したり読み取ったりするのではなく、プログラム内でポインタを使用して変数を操作することができます。次に、この型変換を実行する方法を詳しく紹介し、誰もがよりよく理解できるようにサンプル コードを提供します。

質問内容

戻り値のtypeパラメータに基づいて、json文字列のバイト配列を別のバイト配列に変換する関数を書こうとしていますが、ルールは次のとおりです:

  • map[string]interface{}:map[string]interface{}
  • に変換
  • []バイト: 変換せず、そのまま返します
  • 構造体: 構造体に変換

私のコードは次のとおりです:

リーリー

このコードは、以下に示すように、jsonbytearray の型 を t に変換するときに type エラー を生成します。 リーリー

この

[]byte 型変数のポインタをジェネリック型の戻り値に割り当てるにはどうすればよいですか?

解決策

tany によって制約されているため、直接変換することはできません。このスイッチの場合、assert &jsonbytearray は実際には *t と同じ型である必要があります: リーリー

これによりコンパイル エラーはなくなりますが、特に優れた設計とは言えません。

json.unmarshal を 1 つの型 (*[]byte) に対して特に使用する必要がある場合は、汎用関数を使用する代わりに呼び出しサイトを変更することをお勧めします。

あなたの目標は、呼び出し元がバイトスライスをアンマーシャリングするのではなく、そのまま取得できるようにすることだと思います。その後、呼び出しサイトで関数を

として呼び出すことができます。 リーリー

これは、この時点で

jsonbytearray がバイト スライスであることがすでにわかっていることを意味します。 したがって、この関数を呼び出す理由はありません。パラメータのアドレスを取得するだけです:

data := &jsonbytearray

、他の場所で json.unmarshal を使用します。

以上が既知の型をスイッチの型パラメータへのポインタに変換するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はstackoverflow.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。