首頁 >後端開發 >Golang >golang函數指標的本質和用法

golang函數指標的本質和用法

王林
王林原創
2024-04-26 09:18:01880瀏覽

在 Go 語言中,函數指標指向函數的入口位址,可儲存在變數中或傳遞給函數。使用函數指標有助於解耦呼叫函數和實作函數的程式碼。它可用於儲存函數、傳遞函數或傳回函數。一個應用場景是建立可排序鍵值對,透過函數指標定義自訂排序規則,將鍵值對按值進行升序排序。

golang函數指標的本質和用法

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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn