摘要:1. 什麼是函數指標?函數指標是儲存函數位址的變量,允許將函數作為另一個函數的參數。 2. 什麼是閉包?閉包是對函數附加資料的函數,它捕捉到函數被呼叫時的作用域變量,使函數可以引用外部變量,即使它們已被作用域釋放。
Golang 函數指標與閉包:概念解析
函數指標
函數指標是儲存函數位址的變數。它允許將函數作為另一個函數的參數。語法如下:
type FuncType func(params) (return type) var functionPointer FuncType functionPointer = func(params) (return type) { ... }
閉包
閉包是對函數附加附加資料的函數。它捕捉到函數被呼叫時的作用域變數。這允許函數引用外部變量,即使它們已被其作用域釋放。
語法:
func enclosingFunction(params) (return type) { // 外部变量声明 // 内部函数(闭包) innerFunction := func(innerParams) (return type) { // 内部函数可以访问外部变量 // 返回值 } // 返回内部函数(闭包) return innerFunction }
實戰案例:排序
假設我們有一個[]int
數組,我們希望按照升序或降序對其進行排序。我們可以使用 Golang 的 sort
套件,它提供了一個 Sort
函數,它帶有一個比較函數作為參數。
以下是使用閉包來建立自訂比較函數的範例:
package main import ( "sort" ) // 定义排序方式 type SortOrder string const ( Ascending SortOrder = "ASC" Descending SortOrder = "DESC" ) // 根据指定顺序创建比较函数 func createComparator(sortOrder SortOrder) func(a, b int) bool { return func(a, b int) bool { if sortOrder == Ascending { return a < b } return a > b } } func main() { numbers := []int{3, 5, 2, 1, 4} // 使用升序比较函数排序 sort.Slice(numbers, createComparator(Ascending)) // 使用降序比较函数排序 sort.Slice(numbers, createComparator(Descending)) }
在這個範例中:
createComparator
函數接受一個SortOrder
作為參數,並傳回一個比較函數。 sortOrder
變量,即使 createComparator
函數已經傳回。 sortOrder
使用 Ascending
或 Descending
順序比較兩個數字。 main
函數示範如何使用自訂比較函數對陣列進行升序和降序排序。 以上是Golang函數指標與閉包:概念解析的詳細內容。更多資訊請關注PHP中文網其他相關文章!