go方法定义中的问题

weixin_38063425 2019-09-20 10:56:56
type Employee struct {
name string
salary int
}

func (e *Employee) changeName(newName string) {
(*e).name = newName
}

func main() {
e := Employee{
name: "Ross Geller",
salary: 1200,
}

// e before name change
fmt.Println("e before name change =", e)

// create pointer to `e`
ep := &e
// change name
ep.changeName("Monica Geller")
// e after name change
fmt.Println("e after name change =", e)
}

为什么 要 ep := &e,而不是直接 e.changeName 来修改呢,结果不是都 一样吗
...全文
39 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
weixin_38066448 2019-09-20
  • 打赏
  • 举报
回复
```go package main import "fmt" type Employee struct { name string salary int } func (e Employee) changeName(newName string) { (e).name = newName } func (e *Employee) changeName1(newName string) { (e).name = newName } func main() { e := Employee{name: "Ross Geller", salary: 1200} // e before name change fmt.Println("e before name change =", e) // create pointer to `e` ep := &e // change name ep.changeName("Monica Geller 1") // e after name change fmt.Println("ep after name change =", e) // change name e.changeName1("Monica Geller 2") // e after name change fmt.Println("e after name change =", e) // change name ep.changeName1("Monica Geller 3") // e after name change fmt.Println("ep after name change =", e) } 结果: e before name change = {Ross Geller 1200} ep after name change = {Ross Geller 1200} e after name change = {Monica Geller 2 1200} ep after name change = {Monica Geller 3 1200} ``` 从上面不难看出changeName和changeName1传递的对象一个是值传递,一个是指针传递 从测试结果来看,e.changeName1是可以正常使用的,在changeName1里面默认用指针操作。

433

社区成员

发帖
与我相关
我的任务
社区描述
其他技术讨论专区
其他 技术论坛(原bbs)
社区管理员
  • 其他技术讨论专区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧