Skip to content

Latest commit

 

History

History
13 lines (8 loc) · 1.29 KB

什么时候函数会传递值.md

File metadata and controls

13 lines (8 loc) · 1.29 KB

什么时候函数会传递值?

和所有C语言家族的成员一样,Go所有的参数传递都是值传递。也就是说,函数始终会传递的内容的一个副本,这就像好像一个指定的任务一样必须执行。举个例子,将int值传递给函数,会拷贝一个int的副本传递,如果传递的是指针值,那么会拷贝一个指针的副本,注意,并不是它指向的数据的副本。有关这种方式会如何影响方法接收的,请参阅后面的部分

映射(map)和切片(slice)的值表现类似于指针:它们一个是包含指向底层map或slice数据的指针描述符。拷贝一个map或者slice,并不会拷贝它所指向的数据。拷贝一个接口,就是拷贝这个接口存储的数据。如果这个接口的值是一个结构体,那么拷贝这个接口就是在拷贝一个结构体,如果这个接口的值是一个指针,那么,拷贝这个接口就是在拷贝这个指针,重要的事情说三遍,拷贝的内容不是这个指针指向的数据。

请注意,此讨论是关于操作的语义。实际实现中,可能会采用一些优化来避免复制, 只要优化不会更改语义即可。

optimization 最佳化
semantics  语义