函數指標在 Go 中用於函數回呼、延遲執行和多型性。閉包用於狀態管理、事件處理和延遲初始化。
函數指標與閉包在Go 中的應用場景
##函數指標
函數指標是指向函數的變數。可以使用func 關鍵字宣告函數指標類型:
type Fn func(int) int函數指標可以作為參數傳遞給其他函數:
func apply(fn Fn, arg int) int { return fn(arg) }
閉包
#閉包是引用了外部函數作用域中變數的函數。可以透過在函數中定義巢狀函數來建立閉包:
func counter() func() int { i := 0 return func() int { i++ return i } }
應用場景函數指標
用於函數回調:傳遞函數作為參數,並在以後某個時候調用它。 延遲執行:將函數指標儲存在變數中,並在需要時執行。
type Person struct { Name string Age int } type ByName []Person func (a ByName) Len() int { return len(a) } func (a ByName) Swap(i, j int) { a[i], a[j] = a[j], a[i] } func (a ByName) Less(i, j int) bool { return a[i].Name < a[j].Name } type ByAge []Person func (a ByAge) Len() int { return len(a) } func (a ByAge) Swap(i, j int) { a[i], a[j] = a[j], a[i] } func (a ByAge) Less(i, j int) bool { return a[i].Age < a[j].Age } func main() { people := []Person{ {Name: "Alice", Age: 30}, {Name: "Bob", Age: 25}, {Name: "Charlie", Age: 35}, } sort.Sort(ByName(people)) fmt.Println(people) // [{Name: Alice Age: 30} {Name: Bob Age: 25} {Name: Charlie Age: 35}] sort.Sort(ByAge(people)) fmt.Println(people) // [{Name: Bob Age: 25} {Name: Alice Age: 30} {Name: Charlie Age: 35}] }
ByName 和ByAge
指定了對Person 切片的不同排序標準。
閉包
func main() { getCount := counter() fmt.Println(getCount()) // 1 fmt.Println(getCount()) // 2 fmt.Println(getCount()) // 3 }###在這個案例中,閉包###getCount### 保存了內部計數器變數# ##i###,並傳回每次呼叫時的遞增值。 ###
以上是函數指標和閉包在Golang中的應用場景的詳細內容。更多資訊請關注PHP中文網其他相關文章!