方法与指针重定向

带指针参数的函数必须接受一个指针:

func ScaleFunc(v *Vertex, f float64) {
v.X = v.X * f
v.Y = v.Y * f
}

以指针为接收者的方法被调用时,接收者既能为值又能为指针:

func (v *Vertex) Scale(f float64) {
v.X = v.X * f
v.Y = v.Y * f
}

对于语句 v.Scale(5),即便 v 是个值而非指针,带指针接收者的方法也能被直接调用。

Go 会将语句 v.Scale(5) 解释为 (&v).Scale(5)

使用指针接收者的原因:

方法能够修改其接收者指向的值

可以避免在每次调用方法时复制该值。若值的类型为大型结构体时,这样做会更加高效。

接口

接口类型 是由一组方法签名定义的集合。接口类型的变量可以保存任何实现了这些方法的值。

接口与隐式实现

类型通过实现一个接口的所有方法来实现该接口

type I interface {
M()
}

type T struct {
S string
}

// 此方法表示类型 T 实现了接口 I,但我们无需显式声明此事。
func (t T) M() {
fmt.Println(t.S)
}

func main() {
var i I = T{"hello"}
i.M()
}

最新文章

  1. POCO库——Foundation组件之核心Core
  2. JavaScript方法call、apply、caller、callee、bind的使用详解及区别
  3. Python导入cx_Oracle报错
  4. 从nib文件里加载collectionViewCell
  5. mongo复习
  6. 漫长Appium之路(一)——从黑苹果到虚拟机
  7. Redis错误配置详解
  8. 兰亭集势笔试题:用最优方法从LinkedList列表中删除重复元素
  9. cocos2d-x 开发中的小问题 在xcode4环境下
  10. Ant学习笔记(1) 基础知识
  11. DevExpress之列表控件
  12. UVA 10815 Andy's First Dictionary(字符处理)
  13. Python学习笔记:概要
  14. DB2常用函数
  15. SQL 知道字段名 全表搜索此字段属于哪个表
  16. Chapter 4 Invitations——9
  17. Matlab中调用VS编译的exe文件并传递变量 的方法
  18. 七:理解控件的运行机制(例:基于CompositeControl命名空间的控件)
  19. HDU 3407.Zjnu Stadium 加权并查集
  20. 使用 axios 详解

热门文章

  1. 基于jQuery的三种AJAX请求
  2. JavaBean为何物?
  3. MAC上好用的解压工具
  4. ajax补充知识点、多对多外键的三种创建方式、django内置序列化组件、批量操作数据、分页器推导思路与自定义分页器的使用、form组件
  5. 多目标优化经典算法——NSGA-II
  6. 一类(One-Class)分类器
  7. KingbaseES在线wal日志
  8. 用ChatGPT来了解ChatGPT
  9. P25_wxss - rpx单位
  10. vue页面加载闪烁的问题以及解决方案