Maison  >  Article  >  développement back-end  >  L'essence et l'utilisation des pointeurs de fonction Golang

L'essence et l'utilisation des pointeurs de fonction Golang

王林
王林original
2024-04-26 09:18:01835parcourir

Dans le langage Go, le pointeur de fonction pointe vers l'adresse d'entrée de la fonction et peut être stocké dans une variable ou transmis à la fonction. L'utilisation de pointeurs de fonction permet de découpler le code qui appelle une fonction du code qui l'implémente. Il peut être utilisé pour stocker des fonctions, transmettre des fonctions ou renvoyer des fonctions. Un scénario d'application consiste à créer des paires clé-valeur triables, à définir des règles de tri personnalisées via des pointeurs de fonction et à trier les paires clé-valeur par ordre croissant de valeur.

Lessence et lutilisation des pointeurs de fonction Golang

Pointeur de fonction en langage Go

Un pointeur de fonction est un pointeur vers une fonction. Dans Go, les fonctions sont des valeurs de première classe, elles peuvent donc être stockées dans des variables, transmises à des fonctions ou renvoyées par des fonctions. Le principal avantage de l’utilisation de pointeurs de fonction est qu’ils dissocient le code qui appelle la fonction du code qui implémente la fonction.

L'essence du pointeur de fonction

Un pointeur de fonction est essentiellement un pointeur pointant vers l'adresse d'entrée de fonction. Dans le langage Go, le type de pointeur de fonction est func(*args)(*result), où : 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 est le paramètre de la fonction type Pointer
  • *result est une valeur ou un pointeur de type de retour de fonction
🎜Utilisation du pointeur de fonction🎜🎜🎜🎜1. 🎜rrreee 🎜🎜2. Passer à la fonction🎜🎜rrreee🎜🎜3. Fonction de retour🎜🎜rrreee🎜🎜Cas pratique : Type de fonction pour créer des paires clé-valeur triables🎜🎜🎜Ce qui suit est un Go qui utilise des pointeurs de fonction pour créer des triables. paires clé-valeur Programme linguistique : 🎜rrreee🎜Sortie : 🎜rrreee🎜Dans cet exemple, le pointeur de fonction SortByValue définit une règle de tri personnalisée qui trie les éléments dans la tranche kv par valeur Trier par ordre croissant. 🎜

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn