Heim >Backend-Entwicklung >Golang >Wie kann ich Go Generics Unions in Typeinschränkungen zum Testen effektiv nutzen?

Wie kann ich Go Generics Unions in Typeinschränkungen zum Testen effektiv nutzen?

Susan Sarandon
Susan SarandonOriginal
2024-12-19 21:42:111001Durchsuche

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

Go-Generika – Typbeschränkungen und Unions erklärt

In Go-Generika spielen Gewerkschaften eine bestimmte Rolle als Teil von Schnittstelleneinschränkungen. Lassen Sie uns herausfinden, was das bedeutet und wie es mit Ihrer Frage zum Testen mit verschiedenen Typen zusammenhängt.

Was sind Unions?

In generischen Typeinschränkungen definieren Unions eine Reihe von Typen, mit denen ein Typparameter übereinstimmen muss. Zum Beispiel:

type intOrString interface {
    int | string
}

Diese Einschränkung stellt sicher, dass jeder generische Typparameter T entweder ein int oder ein String sein muss.

Warum können Unions nicht als Typen verwendet werden?

Eine Schnittstellenbeschränkung mit einer Union ist kein regulärer Schnittstellentyp. Diese Unterscheidung ist im generischen Design von Go beabsichtigt.

Zulässige Operationen auf Union-Einschränkungen

Funktionen, die einen Typparameter mit einer Union-Einschränkung verwenden, können nur Operationen ausführen, die von jedem Mitglied von zulässig sind der Gewerkschaftssatz. Dazu gehören:

  • Variablendeklarationen
  • Umrechnungen
  • Vergleiche
  • Reihenfolge
  • Der Operator

Bewerben Sie sich bei Ihrem Frage

Ihr ursprünglicher Ansatz verwendete intOrString als Typ, was nicht zulässig ist. Um eine Union-Einschränkung korrekt zu verwenden, ändern Sie Ihren Code wie folgt:

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
    }
}

Durch die Trennung der Testfälle basierend auf dem Typparameter können Sie die Einschränkung umgehen, dass ein generischer Container keine unterschiedlichen Elemente enthalten kann Typen.

Das obige ist der detaillierte Inhalt vonWie kann ich Go Generics Unions in Typeinschränkungen zum Testen effektiv nutzen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn