Rumah >pembangunan bahagian belakang >Golang >Intipati dan penggunaan penunjuk fungsi golang

Intipati dan penggunaan penunjuk fungsi golang

王林
王林asal
2024-04-26 09:18:01888semak imbas

Dalam bahasa Go, penuding fungsi menghala ke alamat entri fungsi dan boleh disimpan dalam pembolehubah atau dihantar ke fungsi. Menggunakan penunjuk fungsi membantu memisahkan kod yang memanggil fungsi daripada kod yang melaksanakannya. Ia boleh digunakan untuk menyimpan fungsi, lulus fungsi, atau mengembalikan fungsi. Satu senario aplikasi adalah untuk mencipta pasangan nilai kunci boleh diisih, menentukan peraturan pengisihan tersuai melalui penunjuk fungsi dan mengisih pasangan nilai kunci dalam tertib menaik mengikut nilai.

Intipati dan penggunaan penunjuk fungsi golang

Penunjuk fungsi dalam bahasa Go

Penunjuk fungsi ialah penuding kepada fungsi. Dalam Go, fungsi ialah nilai kelas pertama, jadi ia boleh disimpan dalam pembolehubah, dihantar ke fungsi atau dikembalikan daripada fungsi. Kelebihan utama menggunakan penunjuk fungsi ialah ia memisahkan kod yang memanggil fungsi daripada kod yang melaksanakan fungsi tersebut.

Intipati penuding fungsi

Penunjuk fungsi pada asasnya ialah penuding yang menunjuk ke alamat kemasukan fungsi. Dalam bahasa Go, jenis penuding fungsi ialah func(*args)(*result), dengan: 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

  • *args ialah parameter fungsi taip Penunjuk
  • *hasil ialah nilai atau penunjuk bagi jenis pulangan fungsi
🎜Penggunaan penunjuk fungsi🎜🎜🎜🎜1 🎜rrreee 🎜🎜2. Lulus ke fungsi🎜🎜rrreee🎜🎜3. Kembalikan fungsi🎜🎜rrreee🎜🎜Kes praktikal: Jenis fungsi untuk mencipta pasangan nilai kunci boleh diisih🎜🎜 yang berikut ialah Go yang boleh diisih pasangan nilai kunci Program bahasa: 🎜rrreee🎜Output: 🎜rrreee🎜Dalam contoh ini, penunjuk fungsi SortByValue mentakrifkan peraturan pengisihan tersuai yang mengisih elemen dalam kepingan kv mengikut nilai Isih dalam tertib menaik. 🎜

Atas ialah kandungan terperinci Intipati dan penggunaan penunjuk fungsi golang. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn