golang中的函数的值传递
今天遇到了一个困惑的地方,很多新手可能会遇到(特别是之前是做JAVA的) golang中的面向对象的部分的特性(下边写的就是process是MySession结构体的一个方法,golang中采用的是这种一个代码片段一个代码片段的方式给结构体或者说class添加隶属于他的执行方法的,而拥有的属性和java中一样,事先定义在内部的。) typeMySession 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值传递,那性能可想而知非常糟糕,而且你也完全不会影响到外边的那个之前的结构体。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |