golang中的函数的值传递

今天遇到了一个困惑的地方,很多新手可能会遇到(特别是之前是做JAVA的)

golang中的面向对象的部分的特性(下边写的就是process是MySession结构体的一个方法,golang中采用的是这种一个代码片段一个代码片段的方式给结构体或者说class添加隶属于他的执行方法的,而拥有的属性和java中一样,事先定义在内部的。)

type MySession struct{

in string

out string

}


func (session MySession)process(xmlStr string){
.........
}

func (session *MySession)process(xmlStr string){
.........
}

的区别

*MySession 代表了 MySession 的引用地址,而MySession是struct ,如果是java的思维来想 是 复杂数据类型应该是引用传递,在函数内部对MySession的改变是有用的

而golang中不是这样的,golang中大部分是值传递包括struct , 数组, 除了slice map channel是引用传递,对于func (session MySession)process(xmlStr string){}来说就是copy了一份MySession,在函数内部的作用也不会反应到原先的MySession上,而func (session *MySession)process(xmlStr string){}则可以,因为*MySession是引用地址,把引用地址值传递了copy了引用地址,对它的作用就是反应到了原先的结构体上,如果是复杂的struct,而忘记了加 * ,那么整个结构体都被copy值传递,那性能可想而知非常糟糕,而且你也完全不会影响到外边的那个之前的结构体。

本文来自:CSDN博客

感谢作者:suncaishen

查看原文:golang中的函数的值传递

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。