Go 関数型の進化により、大幅な改善がもたらされました。 インターフェイス型 (初期): 関数シグネチャはインターフェイスを通じて実装できますが、制限があります。ジェネリック関数 (Go 1.18 以降): 関数の型表現機能を向上させるために、型パラメーターが導入されました。関数ポインター (Go 1.19 以降): 関数値を保存できるようになり、柔軟性が向上します。
Go 関数タイプの歴史的進化
Go の関数タイプは、Go の開発中に多くの改良を受けてきました。関数の型をより柔軟に、表現しやすく、使いやすくします。
初期: インターフェイス型
Go 言語は当初、関数型を表すためにインターフェイス型を使用していました。インターフェイスを実装することにより、関数のシグネチャと動作を指定できます。このアプローチは効果的ですが、制限が非常に厳しく、汎用関数を表現できません。
ジェネリック関数 (Go 1.18 以降)
ジェネリック関数は Go 1.18 で導入され、型パラメーターを使用して関数を定義できるようになりました。これにより、関数タイプの表現力が向上し、多くのタイプのデータを処理する汎用関数を作成できるようになります。
// 定义一个泛型函数,返回类型参数 T 的切片的长度 func Len[T any](slice []T) int { return len(slice) }
関数ポインター (Go 1.19 以降)
Go 1.19 で導入された関数ポインターにより、関数型の柔軟性がさらに向上しました。関数ポインターを使用すると、関数値を変数に格納し、引数として渡したり返したりすることができます。
// 定义一个带参数的函数类型,并将其存储在变量中 type FuncType func(int) int var fn FuncType = func(x int) int { return x * 2 }
実用的なケース
これらの関数タイプを使用して、コードのモジュール性と再利用性を強化できます。例:
汎用関数を使用してさまざまなデータ型をスライスする
var intSlice = []int{1, 2, 3} var stringSlice = []string{"a", "b", "c"} fmt.Printf("Length of int slice: %d\n", Len(intSlice)) fmt.Printf("Length of string slice: %d\n", Len(stringSlice))
関数ポインタを使用してコールバック関数を作成する
// 定义一个带回调函数的参数函数 func WithCallback(fn FuncType) { fmt.Printf("Callback result: %d\n", fn(10)) } // 创建一个实现回调函数的匿名函数 WithCallback(func(x int) int { return x * x })
以上がGolang の関数タイプの歴史的進化は何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。