【高级数据类型2】- 12. 指针(续

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并发编程实战》中的相关章节。编程

相关文章
相关标签/搜索