Heim >Backend-Entwicklung >Golang >Wie kann ich Go-Generics-Funktionen mit gemischten Typen in einer Union-Einschränkung effektiv einem Unit-Test unterziehen?

Wie kann ich Go-Generics-Funktionen mit gemischten Typen in einer Union-Einschränkung effektiv einem Unit-Test unterziehen?

Patricia Arquette
Patricia ArquetteOriginal
2025-01-04 16:46:39977Durchsuche

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

Go-Generika – Unions und Unit-Tests mit gemischten Typen

Unionen verstehen

Unions in Go-Generika stellen eine Reihe von Typen dar, die verwendet werden können einen generischen Typparameter einschränken. Sie werden ausschließlich in Schnittstelleneinschränkungen verwendet und geben an, dass ein generischer Typparameter T nur Typen akzeptieren kann, die in der Union enthalten sind.

Verwendung von Unions beim Unit-Testen

Beim Schreiben von Unit-Tests für generische Funktionen müssen Sie kann auf die Herausforderung stoßen, mit verschiedenen Typen zu testen. In Ihrem Fall wollten Sie Ihre Differenzfunktion sowohl mit Ints als auch mit Strings innerhalb desselben Tabellentests testen.

Warum die intOrString-Schnittstelle fehlschlägt

Bei Ihrem Versuch, eine intOrString-Schnittstellenbeschränkung zum Testen zu erstellen, ist ein Fehler aufgetreten Fehler, da intOrString kein gültiger Typ ist. Es handelt sich um eine Einschränkung, die den generischen Typparameter T entweder auf int oder string beschränkt. Sie können einen Typ nicht direkt mithilfe einer Typeinschränkung instanziieren.

Lösung: Verwenden eines generischen Containers

Anstatt eine intOrString-Einschränkung zu verwenden, sollten Sie Ihre Testeingabe- und -ausgabeabschnitte als generische Typen mit deklarieren intOrString-Einschränkung:

type testDifferenceInput[T intOrString] [][]T
type testDifferenceOutput[T intOrString] []T

Dieser Ansatz wird Ihr Problem jedoch nicht vollständig lösen. Ein generischer Container kann keine Elemente unterschiedlichen Typs enthalten. In Ihrem Test-Slice haben Sie zwei unterschiedliche Typen: testDifference[int] und testDifference[string].

Slices nach Typ trennen

Um unterschiedliche Typen in Ihrem Unit-Test zu berücksichtigen, können Sie die trennen Slices nach Typ:

ttInts := []testDifference[int]{
    // ... test cases for ints
}
ttStrs := []testDifference[string]{
    // ... test cases for strings
}

Operationen mit Union-Einschränkungen

Union-Einschränkungen begrenzen die Operationen Dies kann für den generischen Typparameter durchgeführt werden. Im Fall von int | Zeichenfolge sind nur Operationen zulässig, die auf beide Typen anwendbar sind, z. B. Vergleiche, Reihenfolge und Addition (nur für Zeichenfolgen).

Das obige ist der detaillierte Inhalt vonWie kann ich Go-Generics-Funktionen mit gemischten Typen in einer Union-Einschränkung effektiv einem Unit-Test unterziehen?. 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