Maison >développement back-end >Golang >L'essence et l'utilisation des pointeurs de fonction Golang
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.
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 fonctionSortByValue
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!