Maison > développement back-end > Golang > Les types de fonctions Golang prennent-ils en charge les génériques ?

Les types de fonctions Golang prennent-ils en charge les génériques ?

王林
Libérer: 2024-04-22 14:39:01
original
920 Les gens l'ont consulté

Les types de fonctions génériques en langage Go permettent de définir des signatures de fonctions universelles pour tout type. Plus précisément : la syntaxe d'un type de fonction générique est func[type-parameters][parameters](receiver) (valeurs de retour). Les paramètres de type sont soumis à des contraintes de type, garantissant qu'ils répondent à certaines conditions ou implémentent certaines interfaces. Les types de fonctions génériques peuvent créer du code qui fonctionne sur une variété de types, offrant ainsi la sécurité des types et la réutilisabilité du code.

Golang 函数类型是否支持泛型?

Types de fonctions génériques en Go

Les génériques dans le langage Go sont implémentés sous forme de paramètres de type, qui permettent de définir des fonctions pouvant opérer sur n'importe quel type. Les types de fonctions peuvent également être génériques, créant une signature de fonction générique dont les types de paramètres peuvent être n'importe quel type conforme aux contraintes données.

La syntaxe d'un type de fonction générique

La syntaxe d'un type de fonction générique est la suivante :

func[type-parameters]<fn-name>[parameters](receiver) (return-values)
Copier après la connexion

où :

  • type-parameters est une liste de paramètres de type, entourée par crochets [ ] composés de variables de type entre crochets. type-parameters 是一个类型参数列表,由用方括号 [] 括起来的类型变量组成。
  • fn-name 是函数的名称。
  • parameters 是普通函数参数的列表。
  • receiver 是可选的接收器类型。
  • return-values 是函数的返回值类型列表。

类型约束

类型参数可以受到类型约束,这意味着它必须实现某些接口或满足其他条件。类型约束使用 [] 约束语法指定。

例如,以下泛型函数类型约束类型参数 T 必须实现 fmt.Stringer 接口:

func[T fmt.Stringer]<toStringStringer>(t T) string
Copier après la connexion

实战案例

考虑一个需要比较两个元素并返回较小元素的泛型函数:

package main

import "fmt"

func[T any]<min>(a, b T) T {
    if a < b {
        return a
    }

    return b
}

func main() {
    fmt.Println(min(1, 2)) // 1
    fmt.Println(min(1.5, 2.5)) // 1.5
    fmt.Println(min("a", "b")) // "a"
}
Copier après la connexion

在这个示例中:

  • min 函数泛型化,具有类型参数 T
  • T 被约束为可比较类型。
  • 主函数调用 min
  • fn-name est le nom de la fonction.

parameters est une liste de paramètres de fonction ordinaires. récepteur est un type de récepteur facultatif.

return-values est une liste de types de valeurs de retour de la fonction.

🎜🎜🎜Contraintes de type 🎜🎜🎜Un paramètre de type peut être contraint de type, ce qui signifie qu'il doit implémenter certaines interfaces ou satisfaire d'autres conditions. Les contraintes de type sont spécifiées à l'aide de la syntaxe de contrainte []. 🎜🎜Par exemple, le paramètre de type contrainte de type de fonction générique suivant T doit implémenter l'interface fmt.Stringer : 🎜rrreee🎜🎜Cas pratique🎜🎜🎜Envisager un besoin de comparaison deux éléments Et une fonction générique qui renvoie le plus petit élément : 🎜rrreee🎜 Dans cet exemple : 🎜🎜🎜 La fonction min est générique, avec le paramètre de type T. 🎜🎜T est contraint d'être un type comparable. 🎜🎜La fonction principale appelle la fonction min et transmet différents types de valeurs. 🎜🎜🎜🎜Conclusion🎜🎜🎜 Les types de fonctions génériques dans Go offrent un moyen puissant de créer des fonctions génériques qui peuvent être utilisées avec différents types. Ils assurent la sécurité des types et la réutilisabilité du code grâce à l'utilisation de paramètres de type et de contraintes de type. 🎜

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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal