golang では、ジェネリックとはプログラミング言語のスタイルまたはパラダイムであり、すべての型に適応するテンプレートを作成し、特別に使用される場合にのみ特定の変数型を定義することを意味します。ジェネリックを使用すると、プログラマーは、後で指定され、インスタンス化時にパラメーターとして指定される型を使用して、厳密に型指定されたプログラミング言語でコードを作成できます。
このチュートリアルの動作環境: Windows 7 システム、GO バージョン 1.18、Dell G3 コンピューター。
Go 1.18 バージョンには、汎用プログラミングのサポートという新機能が追加されています。
他の言語から Go 言語に移行した開発者であれば、ジェネリックとは何か、またその使用方法は理解できますか?
しかし、Go 言語の初心者で汎用プログラミングに慣れていない人にとって、この関数は混乱するかもしれません。
この記事は、ジェネリック プログラミングに慣れていない人でも Go のジェネリックを理解し、うまく使えるようになることを願っています
Go プログラミングの一般的なガイドライン: Go プログラムは、コードを書くことで書くのではなく、コードを書くことで書く型を定義することで行う
Go プログラミングの一般原則: 型を定義するのではなく、コードを記述することによって Go プログラムを作成する
ジェネリックとは、すべての型に適応するテンプレートを作成し、特に使用される場合にのみ特定の変数の型を定義することを意味します。
ジェネリックとは、プログラミング言語のスタイルまたはパラダイムです。ジェネリックを使用すると、プログラマーは、後で指定され、インスタンス化時にパラメーターとして指定される型を使用して、厳密に型指定されたプログラミング言語でコードを作成できます。
関数を定義する際の引数が仮引数(パラメータ)です。が実際に使用され、渡されるパラメータ パラメータは実際のパラメータ (引数)
加算関数があると仮定します。この関数には、両方とも int
型の 2 つのパラメータと戻り値があります。値も int
; 定義は次のとおりです:
func Test(a,b int) int { return a + b }
渡された 2 つの実際のパラメータが int
型の場合、関数は当然ながら通常どおり実行されます。ただし、この関数は int
型の加算演算を実行するためにのみ使用できます。float64
型の加算演算も実行する必要がある場合は、別の関数
// T 是一个类型形参,在定义函数时类型是不确定的,这里的 any 是 go 泛型定义好的一组类型组合 func Test[T any](a,b T) T { return a + b } // 调用时传入类型实参,伪代码Test[int](1,2) Test(1,2)
type 仮パラメーターの概念 および type 実パラメータ を使用すると、関数で複数の異なるタイプのデータを処理できるようになります。このプログラミング方法は、ジェネリック プログラミング
コンパイル時の型チェックが失われ、バグが発生しやすくなります
ジェネリック関数// Add sums the values of T. It supports string, int, int64 and float64 // // @Description A simple additive generic function // @Description 一个简单的加法泛型函数 // @parameter a, b T string | int | int64 | float64 "generics parameter" // @return c T string | int | int64 | float64 "generics return" func Add[T string | int | int64 | float64](a, b T) T { return a + b } // 使用 Add(1, 2) Add(1.0,2.0)ログイン後にコピー
// MyChan Custom generics chan type // 一个泛型通道,可用类型实参 int 或 string 实例化 type MyChan[T int | string] chan T
// CustomizationGenerics custom generics // // @Description custom generics, which are type restrictions // @Description ~is a new symbol added to Go 1.18, and the ~ indicates that the underlying type is all types of T. ~ is pronounced astilde in English // @Description 自定义泛型,即类型限制 // @Desciption ~ 是 Go 1.18 新增的符号,~ 表示底层类型是T的所有类型。~ 的英文读作 tilde // // @Example With the addition of ~, MyInt can be used, otherwise there will be type mismatch // @Example 加上 ~,那么 MyInt 自定义的类型能够被使用,否则会类型不匹配 type CustomizationGenerics interface { ~int | ~int64 }
以上がgolangのジェネリックとは何ですかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。