Maison  >  Article  >  développement back-end  >  Pointeurs et fermetures de fonctions Golang : analyse de concept

Pointeurs et fermetures de fonctions Golang : analyse de concept

WBOY
WBOYoriginal
2024-04-15 14:39:011089parcourir

Résumé : 1. Qu'est-ce qu'un pointeur de fonction ? Un pointeur de fonction est une variable qui stocke l'adresse d'une fonction, permettant de transmettre une fonction en paramètre à une autre fonction. 2. Qu’est-ce que la clôture ? Une fermeture est une fonction qui ajoute des données à une fonction. Elle capture les variables de portée lorsque la fonction est appelée, permettant à la fonction de faire référence à des variables externes même si elles ont été libérées de la portée.

Pointeurs et fermetures de fonctions Golang : analyse de concept

Pointeurs et fermetures de fonction Golang : analyse de concept

Pointeurs de fonction

Les pointeurs de fonction sont des variables qui stockent des adresses de fonction. Il permet de passer une fonction en argument à une autre fonction. La syntaxe est la suivante :

type FuncType func(params) (return type)
var functionPointer FuncType
functionPointer = func(params) (return type) { ... }

Closure

Une fermeture est une fonction qui ajoute des données supplémentaires à une fonction. Il capture les variables de portée lorsque la fonction est appelée. Cela permet aux fonctions de référencer des variables externes même si elles ont été libérées par leur portée.

Syntaxe :

func enclosingFunction(params) (return type) {
    // 外部变量声明
    
    // 内部函数(闭包)
    innerFunction := func(innerParams) (return type) {
        // 内部函数可以访问外部变量
        
        // 返回值
    }
    
    // 返回内部函数(闭包)
    return innerFunction
}

Cas pratique : le tri

Supposons que nous ayons un tableau de []int et que nous voulions le trier par ordre croissant ou décroissant. Nous pouvons utiliser le package sort de Golang, qui fournit une fonction Sort qui prend une fonction de comparaison comme paramètre. []int 数组,我们希望按照升序或降序对其进行排序。我们可以使用 Golang 的 sort 包,它提供了一个 Sort 函数,它带有一个比较函数作为参数。

以下是使用闭包来创建自定义比较函数的示例:

package main

import (
    "sort"
)

// 定义排序方式
type SortOrder string

const (
    Ascending SortOrder = "ASC"
    Descending SortOrder = "DESC"
)

// 根据指定顺序创建比较函数
func createComparator(sortOrder SortOrder) func(a, b int) bool {
    return func(a, b int) bool {
        if sortOrder == Ascending {
            return a < b
        }
        return a > b
    }
}

func main() {
    numbers := []int{3, 5, 2, 1, 4}
    
    // 使用升序比较函数排序
    sort.Slice(numbers, createComparator(Ascending))
    
    // 使用降序比较函数排序
    sort.Slice(numbers, createComparator(Descending))
}

在这个示例中:

  • createComparator 函数接受一个 SortOrder 作为参数,并返回一个比较函数。
  • 比较函数是一个闭包,它捕获 sortOrder 变量,即使 createComparator 函数已经返回。
  • 比较函数根据 sortOrder 使用 AscendingDescending 顺序比较两个数字。
  • main
  • Voici un exemple d'utilisation de fermetures pour créer une fonction de comparaison personnalisée :
rrreee🎜Dans cet exemple : 🎜La fonction
  • createComparator accepte un SortOrder comme un paramètre et renvoie une fonction de comparaison. 🎜
  • La fonction de comparaison est une fermeture qui capture la variable sortOrder même si la fonction createComparator est revenue. 🎜
  • La fonction de comparaison compare deux nombres dans l'ordre selon sortOrder en utilisant Ascending ou Descending. La fonction 🎜
  • main montre comment trier un tableau par ordre croissant et décroissant à l'aide d'une fonction de comparaison personnalisée. 🎜🎜

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