Golang值传递,到底是用指针还是引用呢

大家先看一段简短代码就很明白了。重点是 函数的入参 函数的返回

type Foo struct {
	Name string
}

func change(foo Foo) Foo {
	foo.Name = "changed"
	return foo
}

func changePointer(foo *Foo) Foo {
	foo.Name = "changed"
	log.Printf("change1 Name: %s,change pointer: %p", foo.Name, foo)
	log.Printf("change2 Name: %s,change pointer: %p", foo.Name, &*foo)
	return *foo
}

func pointerTest() {
	foo := Foo{Name: "test", Age: 123}
	log.Printf("foo Name: %s,foo pointer: %p", foo.Name, &foo)

	fooo := change(foo)
	log.Printf("fooo Name: %s,fooo pointer: %p", fooo.Name, &fooo)
	log.Printf("foo Name: %s,foo pointer: %p", foo.Name, &foo)

	foooo := changePointer(&foo)
	foooo.Name = "final"
	log.Printf("foooo Name: %s,foooo pointer: %p", foooo.Name, &foooo)
	log.Printf("foo Name: %s,foo pointer: %p", foo.Name, &foo)

}
func main() {
	pointerTest()
}
输出如下:
2019-08-16 15:54:07.400133 I | foo Name: test,foo pointer: 0xc000170120
2019-08-16 15:54:07.400296 I | fooo Name: changed,fooo pointer: 0xc000106cc0
2019-08-16 15:54:07.400302 I | foo Name: test,foo pointer: 0xc000170120
2019-08-16 15:54:07.400308 I | change1 Name: changed,change pointer: 0xc000170120
2019-08-16 15:54:07.400312 I | change2 Name: changed,change pointer: 0xc000170120
2019-08-16 15:54:07.400317 I | foooo Name: final,foooo pointer: 0xc000106ce0
2019-08-16 15:54:07.400321 I | foo Name: changed,foo pointer: 0xc000170120

大家看完这段代码,就都懂了哦。
重点:
参数是值拷贝,函数返回也是值拷贝。
TODO:对基本类型来说,正常情况下是不需要考虑用指针的。等下我再加入这部分。

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值