要点

  1. interface是一组method的集合(而不是function, 因为function没有reciver)

  2. 若某个类型实现了interface内所有method,则该类型对象与该interface对象转换

  3. interface是一种语义上的抽象,该对象提供了某种语义抽象功能,而该功能的具体实现不同

    coder(编码器),存在编码,解码功能,但具体可能有json,xml等多种方式实现

  4. 赋值给interface

    • 若为值,则该类型methodreciver也必须是值类型

    • 若为指针值,则该类型methodreciver也必须是指针类型

    因为methodreciver是否为指针,代表的语义功能可能完全不一样

    reciver为指针类型,意味着在该method中,很可能会改变该对象自身(具体由实现决定)

    若一个method要求的是指针类型,而在给interface赋值时,只是传值的话,是无法改变该对象的!

参考

  1. https://github.com/astaxie/build-web-application-with-golang/blob/master/zh/02.6.md

留言

2015-11-10