Golang est un choix populaire parmi les langages de programmation modernes. Il possède une syntaxe simple et une efficacité de développement élevée. Il est largement utilisé dans les applications Web, les serveurs réseau, les systèmes distribués et d'autres domaines. Les fonctions de Golang sont l'une de ses fonctionnalités principales. Nous explorerons ici l'utilisation et les avantages des fonctions Golang en tant que valeurs.
Fonctions des fonctions Golang en tant que valeurs
Les fonctions dans Golang sont des valeurs de première classe, ce qui signifie que les fonctions peuvent être transmises, comparées, affectées à des variables, etc. comme des valeurs ordinaires . Le type de valeur de fonction est func et le type de fonction inclut le type de paramètre et le type de valeur de retour. Par exemple, le code suivant déclare un type de fonction qui reçoit deux variables de type int et renvoie leur somme :
type calculator func(int, int) int
De cette façon, nous pouvons définir plusieurs fonctions qui implémentent le même type de fonction que les variables de ce type , Par exemple :
func add(a, b int) int { return a + b } func multiply(a, b int) int { return a * b } var calc calculator calc = add fmt.Println(calc(1, 2)) //输出:3 calc = multiply fmt.Println(calc(3, 5)) //输出:15
Ici, nous déclarons un type de fonction appelé calculatrice, qui reçoit deux paramètres de type int et renvoie une valeur de type int. Définissez ensuite deux fonctions qui implémentent ce type de fonction : additionner et multiplier, et affectez-les respectivement à la variable calc. Nous pouvons voir que lorsqu'il est appelé, calc n'est pas lié au nom de la fonction réellement implémentée, mais au même type que la fonction vers laquelle il pointe. En effet, les fonctions sont traitées comme des valeurs et les noms de variables ne sont que des références aux fonctions.
Avantages des fonctions Golang en tant que valeurs
Les caractéristiques des fonctions Golang en tant que valeurs apportent les avantages suivants :
1. 🎜#
Les fonctions sont traitées comme des valeurs et les fonctions peuvent être transmises en tant que paramètres à d'autres fonctions, ce qui permet d'obtenir une combinaison de fonctions plus flexible et plus efficace. Par exemple, nous pourrions écrire une fonction d’ordre supérieur qui prend un argument de fonction et applique la fonction à chaque élément de la tranche.func mapFunc(a []int, f func(int) int) []int { b := make([]int, len(a)) for i, v := range a { b[i] = f(v) } return b } func double(x int) int { return x * 2 } a := []int{1, 2, 3} b := mapFunc(a, double) fmt.Println(b) //输出:[2 4 6]
func invoke(fn interface{}, args ...interface{}) []interface{} { val := reflect.ValueOf(fn) t := val.Type() in := make([]reflect.Value, len(args)) for k, v := range args { in[k] = reflect.ValueOf(v) } out := val.Call(in) ret := make([]interface{}, len(out)) for i, v := range out { ret[i] = v.Interface() } return ret } func add(a, b int) int { return a + b } func double(x int) int { return x * 2 } fmt.Println(invoke(add, 1, 2)) //输出:[3] fmt.Println(invoke(double, 3)) //输出:[6]
type callback func(int) func forEach(a []int, f callback) { for _, v := range a { if v == 0 { f(v) } } } func printZero(x int) { fmt.Printf("Found zero: %d ", x) } a := []int{1, 0, 3, 0, 5} forEach(a, printZero) //输出:Found zero: 0 Found zero: 0
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!