为了账号安全,请及时绑定邮箱和手机立即绑定

指针(别名)类型的接收器无效

指针(别名)类型的接收器无效

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 关注
  • 192 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号