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

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

WBOY
リリース: 2024-02-06 09:15:11
転載
1009 人が閲覧しました

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

質問の内容

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 までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート