是否可以访问在类型的基础类型中声明的方法?例如,我希望ResourceSet
能够调用我的Set
类型的AddId
方法。
请参阅:http://play.golang.org/p/Fcg6Ryzb67
package main
type Resource struct {
Id uint32
}
type Set map[uint32]struct{}
func (s Set) AddId(id uint32) {
s[id] = struct{}{}
}
type ResourceSet Set
func (s ResourceSet) Add(resource Resource) {
id := resource.Id
s.AddId(id)
}
func main() {
resource := Resource{Id: 1}
s := ResourceSet{}
s.Add(resource)
}
我得到的错误是:
s.AddId undefined (type ResourceSet has no field or method AddId)
答案 0 :(得分:2)
新命名类型的重点是设置一个新的空方法。
嵌入是一个不同的故事,并添加一些语法糖来调用嵌入类型的方法。
答案 1 :(得分:0)
这可以使用embedding来解决:
type ResourceSet struct {
Set
}
func (s ResourceSet) Add(resource Resource) {
id := resource.Id
s.AddId(id)
}
func main() {
resource := Resource{Id: 1}
s := ResourceSet{Set{}}
s.Add(resource)
}
您还可以创建initializing constructor以简化ResourceSet
创建过程:
func NewResourceSet() {
return ResourceSet{Set{}}
}
func main() {
s := NewResourceSet()
}