章节
问答
课签
笔记
评论
占位
占位

Go语言-指针(续)

    我们在讲接口的时候说过,如果一个数据类型所拥有的方法集合中包含了某一个接口类型中的所有方法声明的实现,那么就可以说这个数据类型实现了那个接口类型。要获知一个数据类型都包含哪些方法并不难。但是要注意指针方法与值方法的区别。
  
    拥有指针方法GrowMove的指针类型*Person是接口类型Animal的实现类型,但是它的基底类型Person却不是。这样的表象隐藏着另一条规则:一个指针类型拥有以它以及以它的基底类型为接收者类型的所有方法,而它的基底类型却只拥有以它本身为接收者类型的方法。
  
    以上一小节练习题中的类型MyInt为例,如果Increase方法是它的指针方法且Decrease方法是它的值方法,那么*MyInt类型会拥有这两个方法,而MyInt类型仅拥有Decrease方法。再以Person类型为例。即使我们把GrowMove都改为值方法,*Person类型也仍会是Animal接口的实现类型。另一方面,GrowMove中只要有一个是指针方法,Person类型就不可能是Animal接口的实现类型。
  
    另外,还有一点需要大家注意,我们在基底类型的值上仍然可以调用它的指针方法。例如,若我们有一个Person类型的变量bp,则调用表达式bp.Grow()是合法的。这是因为,如果Go语言发现我们调用的Grow方法是bp的指针方法,那么它会把该调用表达式视为(&bp).Grow()。实际上,这时的bp.Grow()(&bp).Grow()的速记法。
  
    在Go语言中,与指针有关的操作实际上还有更多。我们也可以依据这些操作玩儿出很多花样。不过就一般的Go语言编程而言,目前讲述的这些知识已经足够了。如果大家想深入下去,可以参看Go语言官方文档和《Go并发编程实战》中的相关章节。

任务

在源码文件的第10行处加入若干代码,使该文件不出现任何编译错误,并且运行该文件会使标准输出上出现true, true

?不会了怎么办

    在该文件第10行添加的代码可以是:

type Dog struct {
    name string
    age  uint8
}

func (dog Dog) Name() string {
    return dog.name
}
    
func (dog Dog) Age() uint8 {
    return dog.age
}

    注意,答案并不唯一。

||

提问题

写笔记

截图
提交
||

请验证,完成请求

由于请求次数过多,请先验证,完成再次请求

加群二维码

打开微信扫码自动绑定

您还未绑定服务号

绑定后可得到

  • · 粉丝专属优惠福利
  • · 大咖直播交流干货
  • · 课程更新,问题答复提醒
  • · 账号支付安全提醒

举报

0/150
提交
取消
全部 精华 我要发布
全部 我要发布
最新 点赞
只看我的

手记推荐

更多

本次提问将花费2个积分

你的积分不足,无法发表

为什么扣积分?

本次提问将花费2个积分

继续发表请点击 "确定"

为什么扣积分?