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

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

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

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

Go
神不在的星期二 2022-07-25 10:35:57
看起來很基礎,但我不能輕易糾正下面的程序 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) ,但沒有成功。對于第二個,我嘗試了 like &B{a},但也沒有用。A實際上是一個復雜的結構體,里面有互斥體(由 生成的結構體protobuf),所以我需要把它保存為指針,同時需要在上面定義額外的方法,所以定義一個新的類型B。
查看完整描述

2 回答

?
qq_遁去的一_1

TA貢獻1725條經驗 獲得超8個贊

您需要將 A 嵌入到 B 的結構中。您不能使用指針聲明新類型。


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-07-25
?
MM們

TA貢獻1886條經驗 獲得超2個贊

這顯然是語言規范所禁止的。規范:方法聲明:

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

你不能聲明一個接收器類型已經*TT指針類型的方法,你也不能為其他包中定義的類型添加方法。類型聲明和方法聲明必須在同一個包中。


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

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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