Les génériques du langage Go introduisent différentes fonctionnalités de type, notamment : Paramètres de type : permettent aux fonctions ou aux types de représenter des types arbitraires et d'être instanciés avec des types spécifiques. Contraintes de type : limitez les conditions que les paramètres de type doivent remplir. Inférence de type : le compilateur peut déduire les paramètres de type à partir du contexte. Structures et interfaces génériques : les génériques peuvent être utilisés pour définir des structures et des interfaces. Tuple de type : le paramètre type représente une collection ordonnée de types.
Explorez en profondeur les différentes fonctionnalités de type des génériques du langage Go
Introduction
La version 1.18 du langage Go introduit des fonctionnalités génériques, apportant de nouvelles possibilités au langage. Les génériques nous permettent de créer du code réutilisable au sein d'un système typé, rendant le code plus efficace et flexible. Cet article approfondira le rôle et l'utilisation des différents attributs de type dans les génériques du langage Go.
Caractéristiques de type de base
func[T any](x T)
représente une fonction qui peut accepter tout type de paramètres d'entrée et renvoyer le même type de résultat de sortie. func[T any](x T)
表示一个函数,它可以接受任意类型的输入参数并返回相同类型的输出结果。func[T any](x T) where T interface{ Len() int }
表示一个函数,它接受实现了 Len()
方法的任何类型的输入参数。func[T any](x T)
泛型函数可以实例化为 func(int)
或 func(string)
。高级类型特性
func[T any](x T)
可以被调用为 func(int)
, 编译器会自动推断类型参数为 int
。type Stack[T any]
定义了一个使用类型参数 T
作为元素类型的泛型栈结构体。type Pair[T1 any, T2 any]
Les paramètres de type peuvent être restreints par des contraintes de type. Les contraintes de type spécifient les conditions qu'un paramètre de type doit satisfaire. Par exemple, func[T any](x T) où T interface{ Len() int }
représente une fonction qui accepte une fonction qui implémente func(int)
ou func(string)
.
Fonctionnalités de type avancées
🎜🎜Inférence de type : 🎜Les génériques du langage Go prennent en charge l'inférence de type, où le compilateur peut déduire des paramètres de type à partir du contexte d'une fonction ou d'un appel de type. Par exemple,func[T any](x T)
peut être appelé comme func(int)
, et le compilateur déduira automatiquement le paramètre de type comme int . 🎜🎜🎜Structures et interfaces génériques : 🎜Les types génériques conviennent non seulement aux fonctions, mais également aux structures et aux interfaces. Par exemple, <code>type Stack[T any]
définit une structure de pile générique en utilisant le paramètre de type T
comme type d'élément. 🎜🎜🎜Tuples de types : 🎜Les génériques du langage Go prennent en charge les tuples de types, permettant aux paramètres de type de représenter une collection ordonnée de types. Par exemple, type Pair[T1 any, T2 any]
définit un tuple de types, représentant une paire clé-valeur contenant deux types. 🎜🎜🎜🎜Cas pratique🎜🎜🎜Ce qui suit est un exemple de code qui utilise des génériques pour implémenter une structure de données de pile : 🎜package main import "fmt" type Stack[T any] struct { data []T } func (s *Stack[T]) Push(x T) { s.data = append(s.data, x) } func (s *Stack[T]) Pop() T { var x T if len(s.data) > 0 { x = s.data[len(s.data)-1] s.data = s.data[:len(s.data)-1] } return x } func main() { // 实例化栈结构体,使用 int 类型 stack := &Stack[int]{} stack.Push(1) stack.Push(2) fmt.Println(stack.Pop()) // 输出:2 fmt.Println(stack.Pop()) // 输出:1 }
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!