go struct 方法使用指针与不使用指针的区别?

  1. 如下代码,不知道区别是什么!

 type User struct {
     username string 
 }

 func (u User) SetUsername1(username string){
    u.username = username ;
 }

 func (u *User) SetUsername2(username string){
    u.username = username ;
 }
 

这里 申明方法的时候使用 u User 与使用 u *User 的区别是什么?以及使用注意事项?

阅读 20.8k
7 个回答

结构方法等价于

 func SetUsername1(u User, username string){
    u.username = username ;
 }

 func SetUsername2(u *User,username string){
    u.username = username ;
 }

这样就明白了,一个是值传递,一个是指针传递

1.如果你的struct足够大,使用指针可以加快效率
2.如果不使用指针,在函数内部则无法修改struct中的值

建议用指针的方式来做,因为在结构体的成员方法中允许修改该结构体的属性是合理的。

结构体赋值是值传递,你要改变原来的那个,要使用指针,这跟C++是一个道理

是指针类型,即传递出去的是自身而不是拷贝或副本,后续如果抹黑就是连爹妈自己都不认识了。不带号是传递自己的一个拷贝(副本),你随便画,反正不会影响原来的值。

第一种声明方法中拿到的u不是指针,无法修改外部结构体变量里面的值而第二种可以直接修改

1.参数传进去是副本还是引用的区别
2.receiver类型为T只包含T的方法集,receiver类型为T包含T和T的方法集

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏