ホームページ  >  記事  >  バックエンド開発  >  インターフェイス {} からプライベート動的型を変換する

インターフェイス {} からプライベート動的型を変換する

WBOY
WBOY転載
2024-02-06 09:15:11983ブラウズ

インターフェイス {} からプライベート動的型を変換する

質問の内容

go-sqlmock パッケージを使用して、パラメータの 1 つが次のような SQL クエリをテストしようとしています。 gosnowflake .array (本質的にはスライスのラッパー)。通常、このようなことを行うには、値コンバータを作成する必要があります。これを含めました:

リーリー

この関数は、クエリに送信されたパラメータごとに呼び出されます。これを使用して、スライス内の値が正しいかどうかをテストし、そうでない場合はパラメーターを渡します。私が抱えている問題は、arrayconverteroption[string]を作成し、それに gosnowflake.array(["a", "b", "c"]) を与えることです。パラメータを指定すると、 gosnowflake.array*[]string として定義されている内部動的型 *stringarray を返すため、型アサーションは失敗します。

ここで私のジレンマがわかります。一方では、vinterface{} であるため変換できず、内部型が ではないため v のエイリアスもできません。 *[]string 、ただし *stringarray。それで、ここで何をすればいいでしょうか?


正解


リフレクションを発生させずにこれを行う方法が見つかりませんでした。しかし、よく考えてみると、私はこうしました:

リーリー

つまり、このコードは、動的タイプであるスライスへのポインターを特にチェックします。次に、リフレクションを使用して、内部オブジェクトを期待するスライス タイプに変換します。その後、結果に対して interface() を呼び出して反映された値から interface{} を取得し、それを []t に変換します。それでおしまい。そうでない場合は、これらの動的型スライスのいずれも使用していないため、型を通常どおり処理できます。

以上がインターフェイス {} からプライベート動的型を変換するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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