最近看到 aws go sdk 的项目,很多地方都用到指针,比如
func (c *EC2) RunInstances(input *RunInstancesInput) (*Reservation, error) {
这里 EC2 是指针,参数 RunInstancesInput 是指针,返回值 Reservation 也是指针。
这种定义方式有什么优点呢?
1
scnace 2016-09-01 01:12:55 +08:00 via Android
为了扔 struct 方便啊,别人 C++也不是经常扔指针啊~ (捂脸光速逃
|
2
raincious 2016-09-01 06:46:00 +08:00 via Android
|
3
kevinzhow 2016-09-01 06:48:02 +08:00
```
package main import "fmt" func change(x *int){ *x += 1 } func changeWithoutPointer(y int){ y += 1 fmt.Printf("y without pointer is %d\n", y) } func main() { x := 1 y := 1 change(&x) changeWithoutPointer(y) fmt.Printf("x is %d, y is %d\n", x, y) } ``` 跑一下这段代码你就知道了 |
4
zeroday OP @kevinzhow 谢谢你的代码,大概了解你的意思。指针作为参数可以操作对象本身。但是上面的代码不用指针也可以的,用指针有什么优点呢?
|
5
mifly 2016-09-01 08:46:48 +08:00 via iPhone
如果你要修改对象本身,那就要传指针,否则一般是修改到的是副本
|
7
t0byxdd 2016-09-01 09:07:40 +08:00 via Android
把 golang 改成 c/c++搜吧
|
8
Reficul 2016-09-01 10:18:44 +08:00 via Android
不传指针=复制传值=方法只对结构的副本修改,方法执行完了你会发现原结构没变化。
另外传指针代价小,试想一个巨大的结构体肯定要复制内存的,复制指针的代价小多了。 |
9
Lonely 2016-09-01 10:25:32 +08:00 via iPhone
你看的教程里难道没说直接传的话是值传递?
|
10
yeasy 2016-09-01 17:28:43 +08:00
1. 效率高
2. 可以修改对象内容 |