Maison > développement back-end > Golang > Comment puis-je tester efficacement les fonctions génériques Go avec des types mixtes dans une contrainte d'union ?

Comment puis-je tester efficacement les fonctions génériques Go avec des types mixtes dans une contrainte d'union ?

Patricia Arquette
Libérer: 2025-01-04 16:46:39
original
977 Les gens l'ont consulté

How Can I Effectively Unit Test Go Generics Functions with Mixed Types in a Union Constraint?

Go Generics - Unions et tests unitaires avec des types mixtes

Comprendre les unions

Les unions génériques dans Go représentent un ensemble de types qui peuvent être utilisés pour contraindre un paramètre de type générique. Ils sont uniquement employés dans les contraintes d'interface, indiquant qu'un paramètre de type générique T ne peut accepter que les types inclus dans l'union.

Utilisation des unions dans les tests unitaires

Lors de l'écriture de tests unitaires pour des fonctions génériques, vous peut rencontrer le défi de tester avec différents types. Dans votre cas, vous aviez pour objectif de tester votre fonction Difference avec des entiers et des chaînes dans le même test de table.

Pourquoi l'interface intOrString échoue

Votre tentative de création d'une contrainte d'interface intOrString pour tester a rencontré un erreur car intOrString n’est pas un type valide. Il s'agit d'une contrainte qui restreint le paramètre de type générique T à un entier ou à une chaîne. Vous ne pouvez pas instancier directement un type à l'aide d'une contrainte de type.

Solution : Utiliser un conteneur générique

Au lieu d'utiliser une contrainte intOrString, vous devez déclarer vos tranches d'entrée et de sortie de test comme types génériques avec le Contrainte intOrString :

type testDifferenceInput[T intOrString] [][]T
type testDifferenceOutput[T intOrString] []T
Copier après la connexion

Cependant, cette approche ne résoudra pas entièrement votre problème. Un conteneur générique ne peut pas contenir d'éléments de types différents. Dans votre tranche de test, vous avez deux types distincts : testDifference[int] et testDifference[string].

Séparation des tranches par type

Pour prendre en compte différents types dans votre test unitaire, vous pouvez séparer les tranches par type :

ttInts := []testDifference[int]{
    // ... test cases for ints
}
ttStrs := []testDifference[string]{
    // ... test cases for strings
}
Copier après la connexion

Opérations sur les contraintes d'union

Les contraintes d'union limitent les opérations qui peuvent être effectuée sur le paramètre de type générique. Dans le cas de int | chaîne, seules les opérations applicables aux deux types sont autorisées, telles que les comparaisons, le classement et l'addition (uniquement pour les chaînes).

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!

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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal