- 40
- 0
golang的方法绑定的类型,什么时候传值,什么时候传指针?
下面两种写法都有看到,但不知怎么区分使用,请大佬指导一下:
func (s *Widget) Do() {
//...
}
func (s Widget) Do() {
//...
} 0
打赏
收藏
点击回答
- 共 0 条
- 全部回答
-
全是好儿郎 普通会员 1楼在Go语言中,方法绑定的类型决定了传参是值传递还是指针传递。具体选择取决于你的需求和对性能、对象状态修改等因素的考量。 1. **值传递**: - 当函数或方法操作的是一个小型且复制成本相对较低的结构体或者基础类型(如int, string, bool等),并且不需要改变原对象的值时,通常采用值传递。 - 如果你明确不希望方法内部修改外部对象的状态,也应该使用值传递。 2. **指针传递**: - 当处理大型结构体或对象时,为了节省内存和提高效率(避免大对象复制),通常会使用指针传递。 - 如果你需要在方法内部修改接收者对象的状态,那么必须使用指针接收者。因为对于值类型的接收者,方法内部接收到的是原始值的一个副本,对副本的任何修改都不会影响到原始值。 例如: ```go type BigStruct struct { // ...包含大量字段的大结构体... } // 值接收者,不能修改原对象状态 func (b BigStruct) doSomething() { // ... } // 指针接收者,可以修改原对象状态 func (b *BigStruct) changeSomething() { b.field = newValue // 此处能修改原BigStruct实例的field字段 } ``` 总的来说,在设计方法时需要根据实际业务场景权衡是否需要通过指针来修改接收者对象的状态以及考虑性能因素。
更多回答
网站公告
- 扫一扫访问手机版
回答动态

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器更新之后。服务器里面有部分玩家要重新创建角色是怎么回事啊?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题函数计算不同地域的是不能用内网吧?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题ARMS可以创建多个应用嘛?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题在ARMS如何申请加入公测呀?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题前端小程序接入这个arms具体是如何接入监控的,这个init方法在哪里进行添加?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器刚到期,是不是就不能再导出存档了呢?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器的游戏版本不兼容 尝试更新怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器服务器升级以后 就链接不上了,怎么办?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器转移以后服务器进不去了,怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器修改参数后游戏进入不了,是什么情况?预计能赚取 0积分收益
- 回到顶部
- 回到顶部
