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值传递,那性能可想而知非常糟糕,而且你也完全不会影响到外边的那个之前的结构体。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Go语言(Golang)是一种开源的编程语言,它具有简洁、高效和并发性强的特点。在Go语言函数是一等公民,可以像其他类型的一样进行传递和操作。 下面是介绍Golang实现函数的几个关键点: 1. 函数定义:使用关键字`func`来定义函数,语法如下: ``` func 函数名(参数列表) 返回列表 { // 函数体 } ``` 例如,定义一个计算两个整数之和的函数: ``` func add(a, b int) int { return a + b } ``` 2. 函数参数:函数可以接受零个或多个参数,参数之间用逗号分隔。参数可以指定类型,例如`a, b int`表示两个整数类型的参数。如果多个参数的类型相同,可以只在最后一个参数后面指定类型。 例如,定义一个计算两个整数之差的函数: ``` func subtract(a, b int) int { return a - b } ``` 3. 函数返回函数可以返回一个或多个。返回列表放在函数名后面的括号,并指定返回的类型。如果函数没有返回,可以省略返回列表。 例如,定义一个计算两个整数之积和商的函数: ``` func multiplyAndDivide(a, b int) (int, float64) { return a * b, float64(a) / float64(b) } ``` 4. 匿名函数:在Go语言,可以使用匿名函数,即没有函数名的函数。匿名函数可以直接赋给变量,也可以作为参数传递给其他函数。 例如,定义一个匿名函数并将其赋给变量: ``` add := func(a, b int) int { return a + b } ``` 5. 函数作为参数和返回:在Go语言函数可以作为参数传递给其他函数,也可以作为函数的返回。 例如,定义一个接受函数作为参数的函数: ``` func operate(a, b int, operation func(int, int) int) int { return operation(a, b) } ``` 以上是Golang实现函数的基本介绍。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值