可能是 Golang 初学者的问题 :)
尝试编译以下代码时,我遇到了以下编译器错误。
我想为不同类型(这里是 A 和 B)实现一个对象存储,它们共享一个公共的 ID 字段。根据 DRY 的思想,我想使用泛型来实现存储。
当添加一个对象时,我想使用 GS 接口设置其 ID 字段(实际代码当然更复杂),但编译器不允许我这样做。
./prog.go:29:7: item.SetId 未定义(类型 *T 是指向类型参数的指针,而不是类型参数)
./prog.go:34:24: A 未实现 GS(SetId 方法具有指针接收器)
是否有推荐的解决方法?谢谢!!
package main
import "fmt"
type A struct {
ID string
AMember string
}
type B struct {
ID string
BMember string
}
type GS interface {
Id() string
SetId(string)
}
func (s A) Id() string { return s.ID }
func (s *A) SetId(i string) { s.ID = i }
func (s B) Id() string { return s.ID }
func (s *B) SetId(i string) { s.ID = i }
type MyStore[T GS] struct {
values map[string]*T
}
func (s *MyStore[T]) add(item *T) {
item.SetId("aa")
s.values["aa"] = item
}
func main() {
var storeA = &MyStore[A]{}
storeA.values = make(map[string]*A)
a := &A{}
storeA.add(a)
fmt.Println(a.Id())
}
(*item).SetId("aa")
也可以解决第一个问题。 - undefined