英文:
How to resolve ambiguous selector in Go
问题
我定义了两个结构体类型Type1和Type2:
type Type1 struct {
A1, B1, C1 string
}
type Type2 struct {
A1, B1 string
}
然后将它们嵌入到结构体类型Supertype中:
type Supertype struct {
Type1
Type2
}
接下来,我定义了一个带有Send方法的Sender接口,以便同时用于Type1和Type2:
type Sender interface {
Send()
}
最后,我定义了一个函数,我想在其中引用Type1和Type2的字段:
func (p Supertype) Send() {
// ...
p.A1 = "foo"
// ...
}
当然,会出现"ambiguous selector p.A1"的错误。如何在Type1和Type2这两个不同的结构体类型上使用Send方法呢?有一个类似的问题"如何在Go语言中使用接口实现两个不同类型的相同方法?",但我不认为它适用于我的情况。
英文:
I define two struct types Type1 and Type2
type Type1 struct {
A1,B1,C1 string
}
type Type2 struct {
A1,B1 string
}
to embed them in struct type Supertype
type Supertype struct {
Type1
Type2
}
then define interface Sender with method Send in order to use for both Type1 and Type2
type Sender interface {
Send()
}
Finally I define func where I want to refer Type1 and Type2 fields
func (p Supertype) Send() {
..
p.A1 = "foo"
..
}
of course getting 'ambiguous selector p.A1' error. How to use method Send for both struct types Type1 and Type2 ? There is similar question How can two different types implement the same method in golang using interfaces? but I don't think it applies in my case
答案1
得分: 23
如果Type2
也有相同的字段A1
,你可以使用
p.Type1.A1
来访问它。
英文:
You can use
p.Type1.A1
if Type2
too has the same field A1
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论