這似乎是相當(dāng)基本的,但我無法輕易糾正下面的程序 https://play.golang.org/p/8IJn7g0m1Asimport ( "fmt")type A struct{ value int }type B *Afunc (b B) Print() { fmt.Printf("Value: %d\n", b.value)}func main() { a := &A{1} b := new(B(a)) b.Print()}./prog.go:10:6: invalid receiver type B (B is a pointer type)./prog.go:16:12: B(a) is not a type首先,我嘗試將接收器更改為 ,但不起作用。對于第二個,我嘗試了,這也不起作用。func (b *B) &B{a}A實際上是一個包含互斥體的復(fù)雜結(jié)構(gòu)(由 生成的結(jié)構(gòu)),所以我需要將其保留為指針,同時需要在其上定義其他方法,因此定義一個新類型。protobufB
2 回答

守候你守候我
TA貢獻(xiàn)1802條經(jīng)驗 獲得超10個贊
這是語言規(guī)范明確禁止的。規(guī)范:方法聲明:
接收器是通過方法名稱前面的額外參數(shù)部分指定的。該參數(shù)部分必須聲明單個非可變參數(shù),即接收器。其類型必須是已定義類型或指向已定義類型的指針。 稱為接收器基類型。接收器基類型不能是指針或接口類型,并且必須在與方法相同的包中定義。
T
T
T
不能聲明具有已是指針類型的接收器類型的方法,也不能為其他包中定義的類型添加方法。類型聲明和方法聲明必須位于同一包中。*T
T

小怪獸愛吃肉
TA貢獻(xiàn)1852條經(jīng)驗 獲得超1個贊
您需要在 B 的結(jié)構(gòu)中嵌入 A。不能使用指針聲明新類型。
type A struct{ value int }
type B struct{
*A
}
func (b B) Print() {
fmt.Printf("Value: %d\n", b.value)
}
func main() {
a := &A{1}
b := B{a}
b.Print()
}
- 2 回答
- 0 關(guān)注
- 139 瀏覽
添加回答
舉報
0/150
提交
取消