V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
taowen

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

  •  
  •   taowen · Sep 2, 2016 · 2332 views
    This topic created in 3534 days ago, the information mentioned may be changed or developed.
    不知道我的理解是不是正确的 https://segmentfault.com/a/1190000006803598

    感觉 golang 能把方法绑定在 struct 的值上是一种非常奇怪的设计。既然没有任何明显的好处,为何还要提供给用户呢?
    8 replies    2016-09-19 08:48:50 +08:00
    pathletboy
        1
    pathletboy  
       Sep 2, 2016
    其实你把 struct 当成一个函数的参数就明了了,实际上,也是一个参数,隐含的参数。
    函数传参可以传值或者传址,传值的好处是可以使得结构体只读,传址可以改变结构体的成员值。
    rahuahua
        2
    rahuahua  
       Sep 2, 2016
    好问题,暂时想不出为什么....
    chzyer
        3
    chzyer  
       Sep 2, 2016
    我都是看老黄历来决定的
    mengzhuo
        4
    mengzhuo  
       Sep 2, 2016 via iPhone
    不确定就用指针
    只有 struct 足够小时(塞得进 L1 )传 struct ,因为指针还要多寻址一次
    还有对象不传出函数的话怎么样都行
    Comdex
        5
    Comdex  
       Sep 3, 2016
    1 楼正解
    mind3x
        6
    mind3x  
       Sep 3, 2016 via Android
    理解了 immutability 的好处就能理解传值的好处了。
    zeroday
        7
    zeroday  
       Sep 3, 2016 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  
       Sep 19, 2016
    绝大多数情况下,无脑使用指针即可。
    一般的情况下,无意中就用值了,比如 type Foo int 的时候。
    更少的情况下,不得不使用值的时候,自然会去选择用值。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   2691 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 39ms · UTC 15:54 · PVG 23:54 · LAX 08:54 · JFK 11:54
    ♥ Do have faith in what you're doing.