# 2.7 指针类型和值类型 当你写go代码时,很自然的就会问自己,这里应该使用值类型还是指针类型?这有2则好消息。首先,尽管接下来我们要讨论,但是答案都是一样的。 - 一个局部变量赋值 - 结构体字段 - 函数返回值 - 传递给函数的参数 - 方法的接收者 其次,如果你不确定使用那个,那么就使用指针。 正如我们所见,传递值类型是一种确保数据不可变的好方法(在函数内的改变不会影响到调用的代码)。有些时候,这是你需要的行为,但是更多时候,这不是你想要的。 即使你不打算改变数据,也要考虑到创建一个大结构体拷贝的开销。相反地,你可能有一个小结构体,例如: ```go type Point struct { X int Y int } ``` 这种情况下,拷贝一个结构体的开销可能被直接访问`X`和`Y`抵消了,而不是通过间接访问。 另外,这些都是些很微妙的情况,除非你是遍历成千上万个指针,否则你不会发现有任何差别。 ## 链接