亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

指針(別名)類型的接收器無效

指針(別名)類型的接收器無效

Go
慕絲7291255 2022-08-01 10:25:44
這似乎是相當基本的,但我無法輕易糾正下面的程序 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實際上是一個包含互斥體的復雜結構(由 生成的結構),所以我需要將其保留為指針,同時需要在其上定義其他方法,因此定義一個新類型。protobufB
查看完整描述

2 回答

?
守候你守候我

TA貢獻1802條經驗 獲得超10個贊

這是語言規范明確禁止的。規范:方法聲明:

接收器是通過方法名稱前面的額外參數部分指定的。該參數部分必須聲明單個非可變參數,即接收器。其類型必須是已定義類型或指向已定義類型的指針。 稱為接收器基類型接收器基類型不能是指針或接口類型,并且必須在與方法相同的包中定義。TTT

不能聲明具有已是指針類型的接收器類型的方法,也不能為其他包中定義的類型添加方法。類型聲明和方法聲明必須位于同一包中。*TT


查看完整回答
反對 回復 2022-08-01
?
小怪獸愛吃肉

TA貢獻1852條經驗 獲得超1個贊

您需要在 B 的結構中嵌入 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()

}


查看完整回答
反對 回復 2022-08-01
  • 2 回答
  • 0 關注
  • 143 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號