2017-06-15 13 views
0

Goのbuiltins関数を見ると、私はそれらがインターフェイスを使用せず、代わりに魔法の 'Type'を使用していることを認識しています。組み込み関数はジェネリックを使用しますか?

https://golang.org/src/builtin/builtin.go

それでは、どのように正確に、これはジェネリックを使用しなくても可能ですか?どのように私は、インターフェイスを持たないappend(それは任意の型の配列を取る)に似た署名を持つ関数を書くだろうか?

+2

「パッケージの組み込みが行くの、事前宣言の識別子のためのドキュメントを提供し \tここで記述項目は、パッケージには、実際にはありません \tを組み込みますが、そのここでの説明は、godocがドキュメントを表示できるようにします。 言語の特別な識別子のための。 – Ryan

+1

これはいい試しですが、本当に、真に*ジェネリック*はありません。組み込み関数は、stdlibではなく、コンパイラーによって組み込みおよび処理され、Go言語自体で使用可能な機能に限定されません。 – Adrian

答えて

5

このような機能を作成することはできません。この一般的な魔法の「遺伝子」を持つ関数は、Predeclared identifiersにリストされているlanguage specificationでカバーされる関数に組み込まれています。 Effective Go: Append:

からappendの署名を引用

[...]模式、それはこのようなものだ:Tは、任意のタイプのプレースホルダである

func append(slice []T, elements ...T) []T 

実際には、タイプTが発信者によって決定されている場合、Goに関数を書き込むことはできません。そのため、appendが組み込まれています:コンパイラからのサポートが必要です。

関連の質問を参照してください。

Go functions accessed through variables

Return map like 'ok' in Golang on normal functions

関連する問題