Go语言 一个接口,其方法作为泛型函数的类型约束

0qx6xfy6  于 2023-02-10  发布在  Go
关注(0)|答案(1)|浏览(143)

我试图利用泛型时,写一个Assert函数测试的东西,但它给了我一个错误Some does not implement TestUtilT (wrong type for method Equals...)错误。我如何才能使代码波纹管的工作,如果在所有?

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

}
t0ybt7op

t0ybt7op1#

替换

func (s *Some) Equals(other Some) bool {

func (s *Some) Equals(other TestUtilT) bool {

然后更换

Assert[Some](t, "", Some{}, Some{})

Assert[Some](t, "", &Some{}, &Some{})

第一个更改将修复最初的错误消息,但是如果没有第二个更改,代码仍然无法正常工作。

相关问题