Go 言語のジェネリックスでは、次のようなさまざまな型機能が導入されています。 型パラメーター: 関数または型が任意の型を表し、具象型でインスタンス化できるようにします。型制約: 型パラメーターが満たさなければならない条件を制限します。型推論: コンパイラーはコンテキストから型パラメーターを推論できます。ジェネリック構造とインターフェイス: ジェネリックを使用して構造とインターフェイスを定義できます。型タプル: type パラメーターは、型の順序付けられたコレクションを表します。
Go 言語のさまざまなタイプのジェネリックについての詳細な説明
はじめに
Go 言語バージョン 1.18 ではジェネリック機能が導入され、言語に新しい可能性がもたらされました。ジェネリックを使用すると、型付きシステム内で再利用可能なコードを作成できるようになり、コードがより効率的かつ柔軟になります。この記事では、Go 言語のジェネリックにおけるさまざまな型属性の役割と使用法について詳しく説明します。
基本的な型の特性
func[T any](x T)
は、任意のタイプの入力パラメータを受け入れ、同じタイプの出力結果を返すことができる関数を表します。 func[T any](x T) です。ここで、T インターフェイス{ Len() int }
は、 を実装する関数を受け入れる関数を表します。 Len( )
メソッドへの任意のタイプの入力パラメータ。 func[T any](x T)
汎用関数は、func(int)
または func(string)
としてインスタンス化できます。 高度な型機能
func[T any](x T)
は func(int)
として呼び出すことができ、コンパイラは自動的に型パラメータを int
として推論します。 。 type Stack[T any]
は、要素型として型パラメーター T
を使用して汎用スタック構造を定義します。 type Par[T1 any, T2 any]
は、2 つの型を含むキーと値のペアを表す型タプルを定義します。 実践的なケース
次は、ジェネリックスを使用してスタック データ構造を実装するコード例です。
package main import "fmt" type Stack[T any] struct { data []T } func (s *Stack[T]) Push(x T) { s.data = append(s.data, x) } func (s *Stack[T]) Pop() T { var x T if len(s.data) > 0 { x = s.data[len(s.data)-1] s.data = s.data[:len(s.data)-1] } return x } func main() { // 实例化栈结构体,使用 int 类型 stack := &Stack[int]{} stack.Push(1) stack.Push(2) fmt.Println(stack.Pop()) // 输出:2 fmt.Println(stack.Pop()) // 输出:1 }
結論
Go 言語のジェネリックスは柔軟性と再利用性をもたらし、開発者がさまざまなタイプで動作するジェネリック コードを作成できるようにします。さまざまな型の特性を理解することで、開発者はジェネリックを使用してコードの品質と効率を向上させることができます。
以上がGo 言語のさまざまなタイプのジェネリックについての詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。