#### go中参数的传递(涉及:切片slice、map、channel等) ####

Go语言中所有的传参都是值传递,都是一个副本或拷贝,且传参和赋值(=)的操作本质是一样的。拷贝的内容又分为:非引用类型、引用类型。

【非引用类型】int、string、struct、array,在子函数内修改这些就不会修改原函数的内容数据。

【引用类型】指针、map、slice、chan ,在子函数内修改这些是会修改原函数的内容数据。

切片

切片的传递为引用传递,但是注意引用的是切片中的元素而非切片本身。

【注意append】值类型的切片传递,会保持元素的修改影响原切片,但是切片元素的增删(append操作)不会影响原切片。

【但&slice1】指针类型的切片传递(指的是传递切片的指针,例如:&slice1),所有操作均会影响原切片。

map、channel

map和channel是相似的,初始化map后,返回的是指针变量,在函数之间传递的是map的地址,操作会影响原map。

在子函数里操作增加外层的map,在外层是生效的:

package main

import "encoding/json"

func main() {
	tmap := make(map[string]string)
	tmap["1"] = "1"

	f(tmap)

	tmapBytes, _ := json.Marshal(tmap)
	println(string(tmapBytes)) // 打印:{"1":"1","2":"2"}
}

func f(tmap map[string]string) {
	tmap["2"] = "2"
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值