Maison >développement back-end >Golang >Comment puis-je utiliser efficacement les unions Go Generics dans les contraintes de type pour les tests ?

Comment puis-je utiliser efficacement les unions Go Generics dans les contraintes de type pour les tests ?

Susan Sarandon
Susan Sarandonoriginal
2024-12-19 21:42:111001parcourir

How Can I Effectively Use Go Generics Unions in Type Constraints for Testing?

Go Generics - Explication des contraintes de type et des unions

Dans les génériques Go, les unions jouent un rôle spécifique dans le cadre des contraintes d'interface. Voyons ce que cela signifie et comment cela se rapporte à votre question sur les tests avec différents types.

Que sont les unions ?

Dans les contraintes de type génériques, les unions définissent un ensemble de types auxquels un paramètre de type doit correspondre. Par exemple :

type intOrString interface {
    int | string
}

Cette contrainte garantit que tout paramètre de type générique T doit être soit un entier, soit une chaîne.

Pourquoi les unions ne peuvent-elles pas être utilisées comme types ?

Une contrainte d'interface avec une union n'est pas un type d'interface classique. Cette distinction est intentionnelle dans la conception générique de Go.

Opérations autorisées sur les contraintes d'union

Les fonctions utilisant un paramètre de type avec une contrainte d'union ne peuvent effectuer que des opérations autorisées par chaque membre de l'ensemble syndical. Cela comprend :

  • Déclarations de variables
  • Conversions
  • Comparaisons
  • Ordre
  • L'opérateur

Postuler à votre Question

Votre approche originale utilisait intOrString comme type, ce qui n'est pas autorisé. Pour utiliser correctement une contrainte d'union, modifiez votre code comme suit :

type testDifferenceInput[T intOrString] [][]T
type testDifferenceOutput[T intOrString] []T
type testDifference[T intOrString] struct {
    input testDifferenceInput[T]
    output testDifferenceOutput[T]
}

func TestDifference(t *testing.T) {
    var ttInts []testDifference[int]
    var ttStrings []testDifference[string]

    // Populate ttInts and ttStrings with test cases

    for _, tt := range append(ttInts, ttStrings) {
        // Execute the test case
    }
}

En séparant les cas de test en fonction du paramètre de type, vous pouvez contourner la limitation selon laquelle un conteneur générique ne peut pas contenir d'éléments de différents types.

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