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

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

王林
王林nach vorne
2024-02-06 09:45:11977Durchsuche

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

}

richtige Antwort


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!

Stellungnahme:
Dieser Artikel ist reproduziert unter:stackoverflow.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen