Heim > Backend-Entwicklung > Golang > Schnittstelle mit Typbeschränkungen für Methoden als generische Funktionen

Schnittstelle mit Typbeschränkungen für Methoden als generische Funktionen

王林
Freigeben: 2024-02-06 09:45:11
nach vorne
980 Leute haben es durchsucht

Schnittstelle mit Typbeschränkungen für Methoden als generische Funktionen

Frageninhalt

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...)"

}
Nach dem Login kopieren


richtige Antwort


Ersatz

func (s *some) equals(other some) bool {
Nach dem Login kopieren

und

func (s *some) equals(other testutilt) bool {
Nach dem Login kopieren

Dann ersetzen

assert[some](t, "", some{}, some{})
Nach dem Login kopieren

und

Assert[Some](t, "", &Some{}, &Some{})
Nach dem Login kopieren

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!

Quelle:stackoverflow.com
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage