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:
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!