在 Go 語言中,函數指標指向函數的入口位址,可儲存在變數中或傳遞給函數。使用函數指標有助於解耦呼叫函數和實作函數的程式碼。它可用於儲存函數、傳遞函數或傳回函數。一個應用場景是建立可排序鍵值對,透過函數指標定義自訂排序規則,將鍵值對按值進行升序排序。
Go 語言中的函數指標
#函數指標是指向函數的指標。在 Go 語言中,函數是第一類值,因此可以儲存在變數中、傳遞給函數或傳回函數。使用函數指標的主要優點是解耦了呼叫函數和實作函數的程式碼。
函數指標的本質
函數指標本質上是一個指向函數入口位址的指標。在Go 語言中,函數指標的類型是func(*args)(*result)
,其中:
*args
是函數參數類型的指標*result
是函數傳回類型的值或指標函數指標的用法
1. 儲存函數
func add(a, b int) int { return a + b } func main() { // 将 add 函数存储在变量 f 中 f := add // 通过 f 调用 add 函数 fmt.Println(f(1, 2)) // 输出:3 }
2. 傳遞給函數
func apply(f func(int) int, arg int) int { return f(arg) } func main() { // 将 add 函数传递给 apply 函数 result := apply(add, 10) fmt.Println(result) // 输出:11 }
3. 傳回函數##
func getAdder(val int) func(int) int { return func(arg int) int { return val + arg } } func main() { // 获得一个返回 10 加数的函数 add10 := getAdder(10) // 使用 add10 函数 fmt.Println(add10(20)) // 输出:30 }
實戰案例:建立可排序鍵值對的函數型別
以下是使用函數指標建立可排序鍵值對的Go 語言程式:type kv struct { key string val int } func (kv *kv) SortByValue() { sort.Slice(kv, func(i, j int) bool { return kv[i].val < kv[j].val }) } func main() { kvList := []*kv{ {"key1", 10}, {"key2", 5}, {"key3", 15}, } kvList.SortByValue() for _, kv := range kvList { fmt.Println(kv.key, kv.val) } }
key2 5 key1 10 key3 15
SortByValue 函數指標定義了一個自訂排序規則,將
kv 切片中的元素依值升序排序。
以上是golang函數指標的本質和用法的詳細內容。更多資訊請關注PHP中文網其他相關文章!