Heim >Backend-Entwicklung >Golang >Schnittstelle mit Typbeschränkungen für Methoden als generische Funktionen
Ich versuche, Generika zu verwenden, während ich eine Assertionsfunktion schreibe, um Dinge zu testen, aber es wird mir eine Fehlermeldung angezeigt some does not implement testutilt (wrong type for method equals...)
Fehler. Wenn ja, wie kann ich den folgenden Code zum Laufen bringen?
package test_util import ( "fmt" "testing" ) type TestUtilT interface { Equals(TestUtilT) bool String() string } func Assert[U TestUtilT](t *testing.T, location string, must, is U) { if !is.Equals(must) { t.Fatalf("%s expected: %s got: %s\n", fmt.Sprintf("[%s]", location), must, is, ) } } type Some struct { } func (s *Some) Equals(other Some) bool { return true } func (s *Some) String() string { return "" } func TestFunc(t *testing.T) { Assert[Some](t, "", Some{}, Some{}) // Error: "Some does not implement TestUtilT (wrong type for method Equals...)" }
Ersatz
func (s *some) equals(other some) bool {
und
func (s *some) equals(other testutilt) bool {
Dann ersetzen
assert[some](t, "", some{}, some{})
und
Assert[Some](t, "", &Some{}, &Some{})
Die erste Änderung behebt Ihre ursprüngliche Fehlermeldung, aber ohne die zweite Änderung funktioniert Ihr Code immer noch nicht.
Das obige ist der detaillierte Inhalt vonSchnittstelle mit Typbeschränkungen für Methoden als generische Funktionen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!