ホームページ >バックエンド開発 >Golang >Golang の一般的な構造/インターフェイスのリスト

Golang の一般的な構造/インターフェイスのリスト

WBOY
WBOY転載
2024-02-13 17:30:11544ブラウズ

Golang 中的通用结构/接口列表

#php エディター Baicao は、この記事で Golang の一般的な構造/インターフェイスのリストを紹介します。 Golang は、学習が容易で、効率的で信頼性の高いオープンソースのプログラミング言語であり、ネットワーク プログラミング、クラウド コンピューティング、その他の分野で広く使用されています。 Golang では、共通の構造とインターフェイスは、コードの再利用性とスケーラビリティを実現するのに役立つ非常に重要な概念です。この記事の導入を通じて、読者は Golang の一般的な構造とインターフェイスをよりよく理解して適用し、プログラミング スキルを向上させることができると思います。

質問内容

Goで共通の構造/インターフェースのリストを取得する方法はありますか?

これが私が達成したいことです。

リーリー

これが私が受け取るエラーです。

リーリー

つまり、私の理解が正しければ、go では any は独自の型になります。これは、「ランタイムが必要とするあらゆるタイプ」の同義語ではありません。私の質問は、このようなことは可能ですか?

回避策

ここでやろうとしていることは、go のジェネリックスが (Java ジェネリックスと同様に) 型消去できることを期待していることを示唆しています。しかしそれは真実ではありません。

List[int] があります。つまり、その Add メソッドは次のようになります。 リーリー

次に、そのインターフェイスを実装するオブジェクトのスライスにそれを追加してみます。 リーリー

さて、

int

any として使用できると考えているかもしれません。そのとおりです。しかし、次のようになります。 リーリー 上記のスライス内のすべての要素には、any

型のパラメータを取る

Add メソッドがあると言っているので、これは次のことを意味します: リーリー は常に有効な呼び出しである必要があります。これは、s[0]

の型が

List[int] である場合には当てはまりません (スニペットの場合のように)。 []int 型の文字列を Elements に追加しようとしています。 リバース エンジニアリングは許可されるべきだという格言があります: リーリー

List[any]

int パラメータを受け入れるようですが、これも許可されていません。これは場合によっては便利ですが、多くの場合、問題が発生する可能性があります。 本質的に、Go のジェネリックはコンパイル時に処理されるものです。 List[int]

を作成すると、コンパイラは

List_int のような型を作成し、その型に Add(el int) メソッドを実装します。最終的に使用する他の List タイプ。 List[any] を作成しない限り、これらの型には Add(any) メソッドはありません。これは、コンパイラによる定型コード生成と考えてください。実行時タイプの消去ではありません。 結果: List[int]

List[any] は完全に異なる型であるため、同じ型であるかのようにスライス内に並べて配置することはできません。やりたいことをできるようにしたい場合は、これを実行できます: リーリー 値の any

アプローチを採用し、型アサーションを使用して、指定された値がリストの基になる型と互換性があるかどうかを確認し、互換性がある場合はそれを追加します。次に、次のようにそれらを 1 つのスライスに追加できます。 リーリー

しかし、実際には、このようなことを行うと、コードは X-Y 問題を叫ぶだけです。本当の問題は X であるのに、Y (ジェネリック) を使用して問題を解決しようとしています。それを解決する最良の方法は何ですか?質問?

以上がGolang の一般的な構造/インターフェイスのリストの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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