dppx9253 2011-06-13 09:56
浏览 77
已采纳

什么时候应该在Go中针对值(而不是指针)定义方法?

Having defined

type MyInt int

I would like to define a method .ShowMe() that just prints the value. I can define this either using *MyInt:

func (this *MyInt) ShowMe() {
    fmt.Print(*this, "
")
}

Or using MyInt:

func (this MyInt) ShowMe() {
    fmt.Print(this, "
")
}

In what cases is it recommended to define methods on values, instead of on pointers?

  • 写回答

2条回答 默认 最新

  • douxuan0698 2011-06-13 11:01
    关注

    There are two questions to ask yourself when making this decision:

    1. Do I want to be able to modify the receiver's value?
    2. Will copying the receiver's value be expensive?

    If the answer to either of these questions is yes, then define the method on a pointer.

    In your example, you don't need to modify the receiver's value and copying the receiver isn't expensive.

    For deciding the answer to #2, my rule of thumb is: if the receiver is a struct with more than one field, pass by pointer. Otherwise pass by value.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥50 寻找一位有逆向游戏盾sdk 应用程序经验的技术
  • ¥15 请问有用MZmine处理 “Waters SYNAPT G2-Si QTOF质谱仪在MSE模式下采集的非靶向数据” 的分析教程吗
  • ¥50 opencv4nodejs 如何安装
  • ¥15 adb push异常 adb: error: 1409-byte write failed: Invalid argument
  • ¥15 nginx反向代理获取ip,java获取真实ip
  • ¥15 eda:门禁系统设计
  • ¥50 如何使用js去调用vscode-js-debugger的方法去调试网页
  • ¥15 376.1电表主站通信协议下发指令全被否认问题
  • ¥15 物体双站RCS和其组成阵列后的双站RCS关系验证
  • ¥15 复杂网络,变滞后传递熵,FDA