下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第Golang中的参数传递示例详解前言
本文主要给大家介绍了关于Golang参数传递的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧。
关于参数传递,Golang文档中有这么一句:
aftertheyareevaluated,theparametersofthecallarepassedbyvaluetothe
functionandthecalledfunctionbeginsexecution.
函数调用参数均为值传递,不是指针传递或引用传递。经测试引申出来,当参数变量为指针或隐式指针类型,参数传递方式也是传值(指针本身的copy)
Slice是最常用的数据结构之一,下面以Slice为例,解释Golang的参数传递机制。
Slice数据结构如下:
示例代码:
packagemain
import"fmt"
funcmain(){
slice:=make([]int,3,5)
fmt.Println("before:",slice)
changeSliceMember(slice)
fmt.Println("after:",slice)
funcchangeSliceMember(slice[]int){
iflen(slice)1{
slice[0]=9
}
函数执行结果为:
befor:[000]
after:[900]
解释:
从数据结构图中可看出,Slice可以理解成结构体类型,包含底层数组首元素地址、数组len、容量三个字段,slice对象在参数传值过程中,把三个字段的值传递过去了,实际上changeSliceMember函数内slice在内存中的地址和main中的slice内存地址不一样,只是字段值是一样的,而第一个字段Pointer的值就是底层数组首元素地址,因此可以直接改变元素内容
可以与下面代码做对比,理解:
packagemain
funcmain(){
value:=new(int)
modifyFunc(value)
println("main:",value)
funcmodifyFunc(value*int){
value=nil
println("modifyFunc:",value)
}
执行结果:
modifyFunc:0x0
main:0xc820049f30
可以看出,即使传值为指针,仍未改变变量value在main中的值,因为modifyFunc中value的值为指针,和main中的value值一样,但是俩对象本身是两个对象,读者可以细细体会
总结
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年殡葬礼仪师客户关系笔试题
- 2026年企业运营流程设计理论基础知识
- 2026年车联网测试员技能评估题
- 2026年选调生考试模拟试卷三
- 2026年非营利组织会计实务题
- 2026年小学班主任招聘面试模拟题
- 2026年防触电知识安全教育
- 2026年老年人医疗知识科普
- 2026年碳汇项目核证师政府核证方向笔试模拟题
- 2026年山东省临沂市临沭县中考英语一模试卷(含详细答案解析)
- 2026年江苏南京市高三二模高考政治模拟试卷试题(含答案详解)
- 大健康行业财务制度
- 现代会议型酒店的推广策略研究
- 2025年高考真题-化学(四川卷) 含答案
- 酰胺的合成MA课件
- 常用观察方法的解读 轶事记录法 幼儿行为观察与支持课件
- 广告牌制作安装售后服务实施方案
- 良渚庞大的水利系统美化
- 油水井大修工艺技术-套管修复加固208
- GB/T 7306.2-200055°密封管螺纹第2部分:圆锥内螺纹与圆锥外螺纹
- 电力安全工作规程(电网建设部分)2023年
评论
0/150
提交评论