V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
taowen
V2EX  ›  Go 编程语言

golang 什么时候应该把方法绑定在 struct 的值上而不是指针上?

  •  
  •   taowen · 2016-09-02 21:54:25 +08:00 · 1672 次点击
    这是一个创建于 3015 天前的主题,其中的信息可能已经有所发展或是发生改变。
    不知道我的理解是不是正确的 https://segmentfault.com/a/1190000006803598

    感觉 golang 能把方法绑定在 struct 的值上是一种非常奇怪的设计。既然没有任何明显的好处,为何还要提供给用户呢?
    8 条回复    2016-09-19 08:48:50 +08:00
    pathletboy
        1
    pathletboy  
       2016-09-02 22:09:33 +08:00
    其实你把 struct 当成一个函数的参数就明了了,实际上,也是一个参数,隐含的参数。
    函数传参可以传值或者传址,传值的好处是可以使得结构体只读,传址可以改变结构体的成员值。
    rahuahua
        2
    rahuahua  
       2016-09-02 23:07:36 +08:00
    好问题,暂时想不出为什么....
    chzyer
        3
    chzyer  
       2016-09-02 23:17:08 +08:00
    我都是看老黄历来决定的
    mengzhuo
        4
    mengzhuo  
       2016-09-02 23:24:46 +08:00 via iPhone
    不确定就用指针
    只有 struct 足够小时(塞得进 L1 )传 struct ,因为指针还要多寻址一次
    还有对象不传出函数的话怎么样都行
    Comdex
        5
    Comdex  
       2016-09-03 01:02:12 +08:00
    1 楼正解
    mind3x
        6
    mind3x  
       2016-09-03 01:25:26 +08:00 via Android
    理解了 immutability 的好处就能理解传值的好处了。
    zeroday
        7
    zeroday  
       2016-09-03 10:04:44 +08:00 via iPhone
    1. receiver 通常用指针( ref:https://github.com/golang/go/wiki/CodeReviewComments#receiver-type)
    2. Slices, maps, channels, strings, function values, and interface values 实现机制类似指针,所以可以直接传递
    3. 大的结构体和将要修改的结构体用指针。因为指针拷贝代价小,并且可以直接操作对象。
    darasion
        8
    darasion  
       2016-09-19 08:48:50 +08:00
    绝大多数情况下,无脑使用指针即可。
    一般的情况下,无意中就用值了,比如 type Foo int 的时候。
    更少的情况下,不得不使用值的时候,自然会去选择用值。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5747 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 32ms · UTC 03:14 · PVG 11:14 · LAX 19:14 · JFK 22:14
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.