GO的第三天学习-命名

Gabriel · · 268 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

基于指针对象的方法
当调用一个函数时,会对其每个参数值进行拷贝,如果一个函数需要更新一个变量
或者函数的其中一个参数实在太大我们希望能够避免进行这种默认拷贝,在这种
情况下我们就需要用到指针。对应到我们这里用来更新接收器的对象的方法,当这
个接收者变量本身比较大时,我们就可以用其指针而不是对象来声明方法

func (p *Point) ScaleBy (factory float64) {
    p.X *= factory
    p.Y *= factory
}

(*Point).ScaleBy

r := &Point{1,2}
r.ScaleBy(2)
fmt.Println(*r) // {2,4}
Nil也是一个合法的接收器类型

就像一些函数允许nil指针作为参数一样,方法理论也可以用nil指针作为其接收者。尤其当nil对于对象来说是合法的零值时,比如 Map 或者 slice。在下面的简答的int链表的例子里,nil代表的空链表。

type IntList struct {
    Value int
    Tail *IntList
}

func (list *IntList) Sum() int {
    if list == nil {
        return 0
    }
    return list.Value + list.Tail.Sum()
}    

有疑问加站长微信联系(非本文作者)

本文来自:Segmentfault

感谢作者:Gabriel

查看原文:GO的第三天学习-命名

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

268 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传