Maison >développement back-end >Golang >Quels sont les impacts spécifiques des génériques Golang sur les fonctions ?

Quels sont les impacts spécifiques des génériques Golang sur les fonctions ?

PHPz
PHPzoriginal
2024-04-16 11:09:021096parcourir

Les génériques ont été introduits dans Go 1.18, avec les effets spécifiques suivants sur les fonctions : Fonctions génériques : peuvent s'exécuter sur différents types sans créer de versions spécifiques. Inférence de type : le compilateur peut déduire automatiquement les types de paramètres de type. Améliorations des performances : améliorez les performances en éliminant les conversions de types. Remplacement d'interface : dans des scénarios simples, des fonctions génériques peuvent remplacer les interfaces. Cas pratique : Les fonctions génériques permettent de calculer la valeur maximale d'une liste, ce qui est à la fois flexible et efficace.

Quels sont les impacts spécifiques des génériques Golang sur les fonctions ?

Impact spécifique des génériques sur les fonctions dans Go

Les génériques sont une fonctionnalité importante introduite dans Go 1.18 qui nous permet de créer du code qui s'exécute sur différents types. Dans le contexte des fonctions, les génériques apportent les effets concrets suivants :

  • Fonctions universelles : Nous pouvons définir des fonctions génériques qui fonctionnent sur différents types sans créer plusieurs versions spécifiques à un type. Par exemple :
// 计算列表中的最大值
func Max[T comparable](list []T) T {
    max := list[0]
    for _, v := range list {
        if v > max {
            max = v
        }
    }
    return max
}
  • Inférence de type : Le compilateur peut déduire automatiquement les types de paramètres de type dans les fonctions génériques. Cela signifie que vous n'avez généralement pas besoin de spécifier explicitement les paramètres de type lors de l'appel d'une fonction. Par exemple :
nums := []int{1, 2, 3, 4, 5}
result := Max(nums)
  • Améliorations des performances : Les fonctions génériques peuvent améliorer les performances en éliminant les conversions de type. Avant les génériques, une conversion de type explicite était nécessaire pour utiliser des fonctions sur différents types. Par exemple :
// 使用泛型之前
nums := []int{1, 2, 3, 4, 5}
max := MaxInt(nums)

// 使用泛型之后
nums := []int{1, 2, 3, 4, 5}
max := Max(nums)
  • Remplacement des interfaces : Les génériques peuvent remplacer les interfaces dans certaines situations. Pour des scénarios simples, les fonctions génériques peuvent éliminer le besoin de créer et d’implémenter des interfaces. Par exemple :
// 使用接口之前
type Comparable interface {
    CompareTo(other Comparable) int
}

// 使用泛型之后
func Max[T comparable](list []T) T {
    max := list[0]
    for _, v := range list {
        if v > max {
            max = v
        }
    }
    return max
}

Cas pratique :

Considérons une fonction qui doit calculer la valeur maximale dans une liste. Avant les génériques, nous devions créer plusieurs versions spécifiques pour différents types :

func MaxInt(list []int) int
func MaxFloat64(list []float64) float64
func MaxString(list []string) string

Cependant, avec les génériques, nous n'avons besoin que d'une seule Max fonction commune :

func Max[T comparable](list []T) T

Cela rend notre code à la fois flexible et efficace.

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