Ya, fungsi tanpa nama dalam Go boleh digunakan untuk mentakrifkan fungsi sekali sahaja atau fungsi yang dilaksanakan dengan segera, manakala penutupan digunakan untuk menyertakan pembolehubah tempatan dalam fungsi tanpa nama supaya pembolehubah ini boleh diakses walaupun yang terakhir kembali.
Fungsi tanpa nama ialah fungsi yang ditakrifkan secara langsung tanpa mentakrifkan nama fungsi. Ia selalunya digunakan untuk menentukan fungsi sekali sahaja, atau fungsi yang perlu dilaksanakan dengan segera. Syntax:
func() { // 函数体 }
Penutupan ialah teknik yang "menyekat" pembolehubah tempatan dalam fungsi tanpa nama supaya pembolehubah tempatan boleh diakses walaupun selepas fungsi tanpa nama kembali. Ini boleh dicapai dengan menggunakan fungsi tanpa nama sebagai nilai pulangan fungsi atau kaedah lain. Sintaks:
func makeCounter() func() int { count := 0 return func() int { count++ return count } }
Kod berikut menggunakan fungsi dan penutupan tanpa nama untuk menjana fungsi yang menjana nombor rawak:
package main import ( "fmt" "math/rand" "time" ) func main() { // 创建一个匿名函数,生成一个随机数 randomFunc := func() int { rand.Seed(time.Now().UnixNano()) return rand.Intn(100) } // 将匿名函数包装在一个闭包中,封锁随机数生成器 getRand := func(r func() int) func() int { return func() int { return r() } }(randomFunc) // 生成 10 个随机数并打印 for i := 0; i < 10; i++ { fmt.Println(getRand()) } }
Output:
32 78 15 64 12 99 17 42 5 37
Atas ialah kandungan terperinci Fungsi tanpa nama Golang dan analisis prinsip penutupan. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!