Les génériques de Go, introduits dans Go 1.18, vous permettent d'écrire des fonctions qui fonctionnent sur différents types sans recourir à des assertions de type ou à des commutateurs de type encombrants. Pour les types numériques, cela améliore considérablement la réutilisabilité du code et la lisibilité. La clé consiste à contraindre le paramètre de type générique à un ensemble spécifique de types numériques à l'aide du package constraints
.
Pour écrire une fonction générique qui fonctionne avec différents types numériques, vous devez importer le package constraints
et utiliser ses contraintes prédéfinies comme constraints.Integer
ou constraints.Float
. Ces contraintes restreignent le paramètre de type générique à ces types satisfaisant la contrainte. Par exemple, créons une fonction générique pour trouver le maximum de deux nombres:
package main import ( "fmt" "golang.org/x/exp/constraints" ) func Max[T constraints.Ordered](a, b T) T { if a > b { return a } return b } func main() { fmt.Println(Max[int](10, 5)) // Output: 10 fmt.Println(Max[float64](3.14, 2.71)) // Output: 3.14 //fmt.Println(Max[string]("hello", "world")) // This will result in a compile-time error }
Cette fonction Max
fonctionne avec tout type qui implémente l'interface constraints.Ordered
, qui inclut int
, int8
, int16
, int32
, int64
, uint
, uint8
, uint16
, uint32
, uint64
, float32
, float64
, string
,,
Peut gérer les génériques de divers types numériques sans assertions de type? Max
Oui, les génériques de Go peuvent gérer divers types numériques T
sans switch
Assissertions de type. L'utilisation de contraintes de type élimine le besoin de vérifications et de conversions de types explicites. Les assertions de type sont sujettes aux erreurs et rendent le code moins lisible. En utilisant des contraintes, le compilateur applique la sécurité de type au moment de la compilation, garantissant que seuls les types appropriés sont utilisés avec la fonction générique. L'exemple précédent le démontre parfaitement: la fonction
Allez:
Number
comme paramètre de type générique peut être trop large; Integer
ou Float
serait plus précis. constraints
fournit de nombreuses contraintes utiles. Utilisez-les pour éviter de définir vos propres contraintes à moins que cela ne soit absolument nécessaire. Cela garantit la cohérence et évite les erreurs potentielles. La principale façon d'éviter les erreurs liées au type est de efficacement en utilisant des contraintes de type . Le package constraints
fournit un mécanisme robuste pour restreindre les types qui peuvent être utilisés avec vos fonctions génériques. En choisissant soigneusement la contrainte appropriée, vous empêchez le compilateur d'autoriser les types incompatibles, en éliminant les erreurs d'exécution.
Au-delà des contraintes:
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!