高度な Golang 関数の機能: クロージャ: データを渡すために周囲のスコープ内の変数をキャプチャします。可変引数関数: 可変数のパラメーターを受け入れます。匿名関数: 名前のない、1 回限りのコールバックまたはクロージャ。高階関数: 関数パラメータを受信または返します。ジェネリック: さまざまなデータ型に適用できるユニバーサル関数 (Go 1.18 で導入)。
Golang 関数の高度な機能
関数は、コードを整理するための強力な方法です。 Go 関数は、よりモジュール化された保守可能なコードを作成するのに役立つ一連の高度な機能を提供します。この記事では、いくつかの便利な高度な機能を紹介し、実際のケースを通じてその応用例を示します。
クロージャ
クロージャは、周囲の関数のスコープ変数をキャプチャする関数です。これにより、関数の実行後にこれらの変数にアクセスできるようになります。これは、ネストされた関数またはコールバックにデータを渡す必要がある場合に便利です。
func outer() func() int { count := 0 return func() int { count++ return count } } func main() { f := outer() fmt.Println(f()) // 1 fmt.Println(f()) // 2 }
可変個引数関数
可変個引数関数を使用すると、可変数の引数を渡すことができます。これは、さまざまなソースからのデータを処理する必要がある場合に便利です。
func sum(numbers ...int) int { total := 0 for _, num := range numbers { total += num } return total } func main() { fmt.Println(sum(1, 2, 3, 4, 5)) // 15 }
匿名関数
匿名関数は、明示的なレシーバーを持たない名前のない関数です。これらは、ワンタイム コールバックまたはクロージャを便利に定義するためによく使用されます。
func main() { // 定义一个匿名函数并传递给 sort.Slice sort.Slice([]int{1, 3, 2}, func(i, j int) bool { return []int{1, 3, 2}[i] < []int{1, 3, 2}[j] }) }
高階関数
高階関数は、関数をパラメータとして受け取るか、関数を返す関数です。これにより、実行時により柔軟でカスタマイズ可能なコードを構築できます。
func add10(x int) int { return x + 10 } func mapValues(nums []int, f func(int) int) []int { result := make([]int, len(nums)) for i, num := range nums { result[i] = f(num) } return result } func main() { nums := []int{1, 2, 3, 4, 5} fmt.Println(mapValues(nums, add10)) // [11 12 13 14 15] }
ジェネリック
ジェネリックを使用すると、さまざまなデータ型にわたって幅広く機能する関数を作成できます。ジェネリックは Go 1.18 で導入されました。
func max[T comparable](a, b T) T { if a > b { return a } return b } func main() { fmt.Println(max(1, 2)) // 2 fmt.Println(max("hello", "world")) // world }
これらは、Golang 関数の高度な機能の一部です。これらの機能は、クロージャ、可変長関数、匿名関数、高階関数、ジェネリックのサポートを提供することで、プログラミングの効率とコードの品質を大幅に向上させることができます。
以上がGolang 関数の高度な機能の紹介の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。