如何解决Go中的模糊选择器问题

huangapple go评论83阅读模式
英文:

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

huangapple
  • 本文由 发表于 2017年1月23日 06:04:24
  • 转载请务必保留本文链接:https://go.coder-hub.com/41796655.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定