H5W3
当前位置:H5W3 > go > 正文

【go】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 的区别是什么?以及使用注意事项?

回答

结构方法等价于

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

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

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

golang doc 上面有这么一段文档,看了之后就明白了,推荐给你

https://golang.org/doc/faq#me…

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

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

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

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

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

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

本文地址:H5W3 » 【go】go struct 方法使用指针与不使用指针的区别?

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址