账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    golang的方法绑定的类型,什么时候传值,什么时候传指针?
    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字段 } ``` 总的来说,在设计方法时需要根据实际业务场景权衡是否需要通过指针来修改接收者对象的状态以及考虑性能因素。
    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部