可用于类型声明中的struct的访问方法

时间:2015-07-02 19:05:54

标签: go

是否可以访问在类型的基础类型中声明的方法?例如,我希望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)

2 个答案:

答案 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()
}