#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
しかし、実際には、このようなことを行うと、コードは X-Y 問題を叫ぶだけです。本当の問題は X であるのに、Y (ジェネリック) を使用して問題を解決しようとしています。それを解決する最良の方法は何ですか?質問?
以上がGolang の一般的な構造/インターフェイスのリストの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。