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