如何理解“在函数之间传递变量时,总是以值的方式传递的”这句话?
在 Golang 中,如何理解“在函数之间传递变量时,总是以值的方式传递的”这句话?
请举例说明,谢谢!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
在 Golang 中,如何理解“在函数之间传递变量时,总是以值的方式传递的”这句话?
请举例说明,谢谢!
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(2)
其含义就是函数体内使用的形参全部都是实参的拷贝,改变形参不会影响到实参,题主要举例,我就举个例好了:
可以看到不管是简单类型int,还是引用类型[]int,或者是指针*string,把变量传入到函数内修改,并不会影响到本身,本身的值是不会改变的,也也就是所谓的“在函数之间传递变量时,总是以值的方式传递”的意思。
对于简单类型int,传递变量也就是传递一个相同值的int。
对于引用类型[]int,传递变量也是引用的拷贝,它和原本的slice指向同一块内存区域,但是当你使用
b = []int{100,200}
改变它的指向后,不会影响到原本的变量。对于指针*string也是同理,传递变量也是指针的拷贝,它和原来的指针是指向同一块内存区域,你可以更改它的指向,不会影响到原本的变量。
http://books.studygolang.com/...,go程序设计语言 函数声明提到:
在函数体中,函数的形参作为局部变量,被初始化为调用者提供的值。函数的形参和有名返回值作为函数最外层的局部变量,被存储在相同的词法块中。
实参通过值的方式传递,因此函数的形参是实参的拷贝。对形参进行修改不会影响实参。但是,如果实参包括引用类型,如指针,slice(切片)、map、function、channel等类型,实参可能会由于函数的间接引用被修改。
这个是语言层面的设计了。