Goのbuiltins関数を見ると、私はそれらがインターフェイスを使用せず、代わりに魔法の 'Type'を使用していることを認識しています。組み込み関数はジェネリックを使用しますか?
https://golang.org/src/builtin/builtin.go
それでは、どのように正確に、これはジェネリックを使用しなくても可能ですか?どのように私は、インターフェイスを持たないappend(それは任意の型の配列を取る)に似た署名を持つ関数を書くだろうか?
Goのbuiltins関数を見ると、私はそれらがインターフェイスを使用せず、代わりに魔法の 'Type'を使用していることを認識しています。組み込み関数はジェネリックを使用しますか?
https://golang.org/src/builtin/builtin.go
それでは、どのように正確に、これはジェネリックを使用しなくても可能ですか?どのように私は、インターフェイスを持たないappend(それは任意の型の配列を取る)に似た署名を持つ関数を書くだろうか?
このような機能を作成することはできません。この一般的な魔法の「遺伝子」を持つ関数は、Predeclared identifiersにリストされているlanguage specificationでカバーされる関数に組み込まれています。 Effective Go: Append:
から
append
の署名を引用[...]模式、それはこのようなものだ:
T
は、任意のタイプのプレースホルダであるfunc append(slice []T, elements ...T) []T
。 実際には、タイプ
T
が発信者によって決定されている場合、Goに関数を書き込むことはできません。そのため、append
が組み込まれています:コンパイラからのサポートが必要です。
関連の質問を参照してください。
「パッケージの組み込みが行くの、事前宣言の識別子のためのドキュメントを提供し \tここで記述項目は、パッケージには、実際にはありません \tを組み込みますが、そのここでの説明は、godocがドキュメントを表示できるようにします。 言語の特別な識別子のための。 – Ryan
これはいい試しですが、本当に、真に*ジェネリック*はありません。組み込み関数は、stdlibではなく、コンパイラーによって組み込みおよび処理され、Go言語自体で使用可能な機能に限定されません。 – Adrian