当前位置: 首页 > news >正文

自己如何建设外贸网站建站建立目录wordpress

自己如何建设外贸网站建站,建立目录wordpress,网页生成长图 iphone,邯郸网站建设有哪些做了五年的go开发#xff0c;却并没有什么成长#xff0c;都停留在了业务层面了。一直以为golang中函数传参#xff0c;如果传的是引用类型#xff0c;则是以引用传递#xff0c;造成这样的误解#xff0c;实在也不能怪我。我们来看一个例子#xff0c;众所周知#xf…做了五年的go开发却并没有什么成长都停留在了业务层面了。一直以为golang中函数传参如果传的是引用类型则是以引用传递造成这样的误解实在也不能怪我。我们来看一个例子众所周知slice是个引用类型我们以slice为例。 package main ​ import fmt ​ func main() {strSlice : make([]string, 0,10)strSlice append(strSlice, 初始值)//打印一下没有在函数内部修改的初始情况fmt.Println(strSlice:,strSlice,strSlice地址,strSlice[0])//在函数内部修改初始slice内容再打印change(strSlice)fmt.Println(strSlice:,strSlice,strSlice地址,strSlice[0]) } func change(str []string){fmt.Println(函数传参地址,str[0])str[0]改掉这个内容 } 猜猜打印出来的会是什么结果 ​不管你是怎么看如果只有这么一个案例就很容易产生误解。打印的函数参数的地址和外部slice的地址是一致并且在函数体内修改的值的确影响了slice的值由此现象很容易得出是引用传递。 事实果真如此么我们再来看一个案例。 package main ​ import fmt ​ func main() {strSlice : make([]string, 0,10)strSlice append(strSlice, 初始值)//打印一下没有在函数内部修改的初始情况fmt.Println(strSlice:,strSlice,strSlice地址,strSlice[0])//在函数内部修改初始slice内容再打印change(strSlice)fmt.Println(strSlice:,strSlice,strSlice地址,strSlice[0]) } func change(str []string){fmt.Println(函数传参地址,str[0])strappend(str,新增一个内容) } 如果是引用传递那么经过change函数追加了值的strSlice应该是能打印出追加的值。好了我们直接看结果。 结果很是出乎我的意料之外啊竟然不是像我上面猜想的那样。由此至少可以得出一个结论golang中函数的参数传递不是引用传递。那么也就是说即使参数是引用类型也是值传递既然是值传递第一个案例作何理解呢第二个案例又如何理解呢 我们看一下slice的底层结构。 //go 1.20.3 path: /src/runtime/slice.go type slice struct {array unsafe.Pointerlen intcap int } array 是一个指向底层数组的指针这个数组存储着切片中的元素。len 表示切片的长度即切片中元素的数量。cap 表示切片的容量即切片底层数组中可用的元素数量。golang的函数传参都是值传递即使传递的是引用类型也是对应引用类型的地址拷贝。因此第一个案例中实际上是把指向底层数组的指针的地址拷贝生成一个副本传到了函数体中所以第一个案例中修改了0xc00006c0a0地址里的内容会引发外面的参数发生变化。这个我们可以做个案例测试一下。 package main ​ import fmt ​ func main() {strSlice : make([]string, 0,10)strSlice append(strSlice, 初始值)//打印一下没有在函数内部修改的初始情况fmt.Println(strSlice:,strSlice,strSlice地址,strSlice[0])//在函数内部修改初始slice内容再打印change(strSlice)fmt.Println(strSlice:,strSlice,strSlice地址,strSlice[0]) } func change(str []string){fmt.Println(函数传参地址,str[0])for i:0;i10;i{str append(str, fmt.Sprint(i))}fmt.Println(扩容之后的地址,str[0])str[0]改掉这个内容 } 我们知道当slice发生扩容runtime会开辟一块新的内存地址把内容拷贝到新的地址指向的内存中那么我们可以测试一下当slice发生扩容再修改内容就不会影响原来的参数。 ​实际结果验证了我们的猜想扩容之后开辟新的内存地址来存放内容因此再修改这个参数也不会影响外部参数。 可是这个依然没有解除掉第二个案例——没有扩容时函数内append之后外部参数打印结果和预期不符的疑惑。实际上并不矛盾因为slice结构中有一个变量len,这个表示slice中元素的数量用大白话来理解就是可见的元素传参的过程中不仅拷贝了地址还拷贝了len和cap因此虽然形参中的len发生了变化但是并不影响实参的len。画个内存示意图来理解一下。 package main ​ import fmt ​ func main() {strSlice : make([]string, 0,10)strSlice append(strSlice, 初始值)//打印一下没有在函数内部修改的初始情况fmt.Println(strSlice:,strSlice,strSlice地址,strSlice[0],len,len(strSlice))//在函数内部修改初始slice内容再打印change(strSlice)fmt.Println(strSlice:,strSlice,strSlice地址,strSlice[0],len,len(strSlice)) } func change(str []string){fmt.Println(函数传参地址,str[0])strappend(str,新增一个内容)fmt.Println(形参str长度:,len(str)) } 直接看结果果然验证了我们上面的猜想。 至此函数值传递的探究到此结束。
http://wiki.neutronadmin.com/news/349487/

相关文章:

  • 有什么网站可以做深圳初二的试卷练习甘肃城乡建设局安全质量网站
  • 整站外包优化公司租服务器做网站
  • 怎样做一个简单的网站东莞大岭山镇邮政编码
  • 企业为何要建设网站哪里建设网站最好用
  • 临桂县住房和城乡建设局网站网站备案人什么意思
  • 建设事业单位网站多少钱电脑小游戏网站
  • 性病医院网站优化服务商青岛网站建设详细内容
  • 做网站还是做游戏基本型电商网站举例
  • 自己的卡盟网站怎么做分站钻石网站建设
  • 百度搜索网站怎么做视频制作软件pr
  • 做淘宝客网站需要多大带宽做暧视频网站
  • 做个自己的网站需要多少钱做网站cookie传值
  • 四川网站建设和优化网络营销概念与含义
  • 网站服务器租用方法WordPress设置域名出错
  • 做网站的入什么科目专做茶叶的网站
  • 外贸英语网站毕设做购物网站容易吗
  • 东莞专业网站推广需要多少钱湖南做网站 找磐石网络一流
  • 万网网站备案查询什么网站空间好
  • fullpage wow做的网站做网站后台的时候要注意什么
  • 网站管理和维护的主要工作有哪些班级网站建设活动方案
  • 网站百度推广怎么做代理网址在线
  • 湛江高端网站建设福州seo网站推广优化
  • 自己电脑做的网站如何映射到公网做logo赚钱的网站
  • 常州网站推广软件厂家网址收录入口
  • 好多公司为啥只做网站 不考虑推广app开发定制软件公司
  • 微网站建设公司家用宽带做网站服务器
  • 网站开发费属于无形资产wordpress个人站无法升级
  • 中国icp备案的有多少企业网站动漫制作专业认知
  • 聊城手机网站建设方案怎么在windows做网站
  • 网站排名优化软件电话WordPress里面备份功能在哪