append生成新变量的时候,没有如预期(It's a feature,not a bug?)

这是我在写一个项目中,遇到的一个golang的feature,如代码所示,我在for循环里,每次用append生成一个新的数组,(当然我以前一直以为可以这样,直到我在stackoverflow上发现不能。)然后将这个数组追加到一个大数组里(二维数组),这时候发现并不如预期那样,似乎每次append没有返回新数组,然而,当我把一开始生成的5修改为2的时候,却是正常的,如果都不正常也好理解,有时正常有时不正常的行为难以琢磨,请懂go底层实现的大牛牛们解释一下为啥会这样呢?
stackoverflow上类似的问题是:

http://stackoverflow.com/ques...

基本上和我的差不多,最后我也是使用答案中建议的方式copy来解决的。

package mainimport ("fmt"
)func main() {arr := make([]int, 0)for i := 0; i < 5; i++ { // 如果将此处的 5 修改为 2,可以看到 [0 1 0] [0 1 1] 运行如预期arr = append(arr, i)}var list [][]intfor _, v := range arr {vi := append(arr, v)fmt.Println(vi)/** 注意此处的vi依次为*     [0 1 2 3 4 0]*    [0 1 2 3 4 1]*    [0 1 2 3 4 2]*    [0 1 2 3 4 3]*    [0 1 2 3 4 4]*/// 但是追加进去后,末尾的最后一位全部变成了4list = append(list, vi)}fmt.Println(list)// 最后的list 却为:/*** [*    [0 1 2 3 4 4]*    [0 1 2 3 4 4]*    [0 1 2 3 4 4]*    [0 1 2 3 4 4]*    [0 1 2 3 4 4] ]** 看起来,似乎go在底层每次使用的是同一个vi,并且vi最后被修改成了最后一次的值4. 鹅妹子嘤!**/
}

运行结果地址:

https://wide.b3log.org/playgr...

将5修改为2后:

https://wide.b3log.org/playgr...


append生成新变量的时候,没有如预期(It's a feature,not a bug?) >> golang

这个答案描述的挺清楚的:
http://www.goodpm.net/postreply/golang/1010000008897291/append生成新变量的时候没有如预期Itsafeaturenotabug.html

转载于:https://www.cnblogs.com/scrumme/p/6978385.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/541233.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

jqgrid本地数据例子_办公系统私有云公有云和本地化部署,你选哪个?

随着互联网和云计算技术的发展&#xff0c;我们常常会听到&#xff1a;私有云、公有云和本地化部署&#xff0c;它们分别代表什么意思&#xff1f;无论是国企、民企还是外企&#xff0c;只要有数据&#xff0c;就要思考&#xff1a;到底将数据储存在哪里&#xff1f;选择轻流进…

计算机基础应用的培养活动记录,小学少年宫计算机兴趣小组活动记录表

小学少年宫计算机兴趣小组活动记录表 小学少年宫计算机兴趣小组活动记录表 活动名称&#xff1a;计算机 指导教师&#xff1a; ⅩⅩ 学生姓名 活动地点 计算机教室 活 动 过 程 活动1&#xff0e;认识计算机 ①师&#xff1a;“请同学们按下方盒子上面像大钮扣一样的按钮&#…

C ++ STL中的set :: lower_bound()函数

C STL set :: lower_bound()函数 (C STL set::lower_bound() function) set::lower_bound() function is a predefined function, it is used to get the lower bound of any element in a set. set :: lower_bound()函数是预定义的函数&#xff0c;用于获取集合中任何元素的下…

flume入门

# example.conf: A single-node Flume configuration# Name the components on this agent #给那三个组件取个名字 a1.sources r1 a1.sinks k1 a1.channels c1# Describe/configure the source #类型, 从网络端口接收数据,在本机启动, 所以localhost, typespoolDir采集目录源…

原生js设置div隐藏或者显示_JavaScript动画方式控制div元素的隐藏和显示

jQuery实现此功能相对比较简单&#xff0c;具体参阅点击按钮动画方式隐藏和显示div一章节。结合CSS3实现此功能也非常便利和适合&#xff0c;具体参阅JavaScript与CSS3动画方式改变元素尺寸一章节。原生JavaScript实现稍显麻烦&#xff0c;下面就通过代码实例介绍一下如何实现此…

python线程任务run_Python线程类| 带有示例的run()方法

python线程任务runPython Thread.run()方法 (Python Thread.run() Method) Thread.run() method is an inbuilt method of the Thread class of the threading module in Python. This method is used to represent a threads activity. It calls the method expressed as the …

哪个计算机无法做到双屏显示,怎么启用双屏显示设置【图文介绍】

随着生活质量的提升&#xff0c;人们对于便利的要求越来越高&#xff0c;电脑的双屏显示成为现在用户越来越关注的对象之一。比如炒股操作中&#xff0c;人们既要关注大盘的走动趋势&#xff0c;又要关注特定股票的走势&#xff0c;在普通的屏幕上就需要不断地切换页面&#xf…

1.django 开发环境搭建

2019独角兽企业重金招聘Python工程师标准>>> 本教程使用的开发环境 本教程写作时开发环境的系统平台为 Windows 10 &#xff08;64 位&#xff09;&#xff0c;Python 版本为 3.5.2 &#xff08;64 位&#xff09;&#xff0c;Django 版本为 1.10.6。 建议尽可能地与…

改jpg_|我来改第04期|—人物海报设计

【我来改第04期】人物海报文案内容-Ad copyhttps://pan.baidu.com/s/16pz9_rcLXTGZ3xzKFjKN9g 密码: r57t设计要求-Requirement尺寸&#xff1a;1080(高)*650(宽)像素&#xff0c;大小不大于5m设计要求&#xff1a;以目前的蓝色为主要颜色(R:47,G:87,B:130)&#xff0c;画面体…

Java即时类| plus()方法与示例

即时类plus()方法 (Instant Class plus() method) Syntax: 句法&#xff1a; public Instant plus(TemporalAmount t_amt);public Instant plus(long amt, TemporalUnit t_unit);plus() method is available in java.time package. plus()方法在java.time包中可用。 plus(Temp…

计算机领域中dns是什么意思,dns错误是什么意思?dns错误要如何解决?

随着网络的普及&#xff0c;电脑已经成为我们生活中必不可少的物品&#xff0c;它可以帮助我们工作和学习以及娱乐。不过电脑在使用的过程中&#xff0c;常常会出现一些问题&#xff0c;小编觉得最常见也最让人心生烦躁的就是输入网址打开之后出现网页打不开&#xff0c;提示dn…

Launch Instruments

Launch Instruments 该仪器应用在Xcode应用程序&#xff0c;所以推出是在Xcode的最直接的方式。你也可以启动它间接地通过码头&#xff0c;启动&#xff0c;或命令行。The Instruments app lives inside the Xcode app, so the most direct way to launch it is from within Xc…

java clock计时_Java Clock类| offset()方法与示例

java clock计时Clock Class offset()方法 (Clock Class offset() method) offset() method is available in java.time package. offset()方法在java.time包中可用。 offset() method is used to generate a new Clock from the given base clock with added the given Duratio…

dataframe数据标准化处理_数据处理中的标准化、归一化究竟是什么?

关注上方“Python数据科学”&#xff0c;选择星标&#xff0c;精彩文章不会错过&#xff01;今天说一个比较重要的内容&#xff0c;无论是在算法建模还是在数据分析都比较常见&#xff1a;数据归一化和标准化。开始之前&#xff0c;请你先把网上看到的所有相关的博客、帖子都忘…

北航计算机学院博士机试考试题,北航2015考博真题回忆及全套资料 - 考博 - 小木虫 - 学术 科研 互动社区...

我是2015年毕业的应届硕士&#xff0c;报考了北航经管院的博士。想写这篇文很久了&#xff0c;现在复试完等最后结果中&#xff0c;把自己一路走来的经验分享给大家。1.报名报名之前很重要的一点就是联系导师。我是研二下&#xff0c;快放暑假了才开始联系导师。北航一般是11月…

用了Redis里面的map和set

map的操作用 hset&#xff0c;hget等 set的操作有 sadd sismember等 参考下面&#xff1a; http://blog.csdn.net/kwsy2008/article/details/48467441

java输出不同颜色_Java设计模式-策略模式、状态模式

推荐阅读&#xff1a;一只Tom猫&#xff1a;都是“Redis惹的祸”&#xff0c;害我差点挂在美团三面&#xff0c;真是“虚惊一场”&#xff01;java喵&#xff1a;6大面试技能树&#xff1a;JAVA基础JVM算法数据库计算机网络操作系统前言当代码中出现多重if-else语句或者switch语…

c++stl和std_std :: rotate()函数以及C ++ STL中的示例

cstl和stdC STL std :: rotate()函数 (C STL std::rotate() function) rotate() function is a library function of algorithm header, it is used to rotate left the elements of a sequence within a given range, it accepts the range (start, end) and a middle point,…

计算机硬盘正在工作应特别注意避免,初级计算机考试题库

计算机的初级基本*作包括基本信息栏、计算机的基础知识、五笔字型基础、*互联网的*作、常用办公外设的使用、计算机硬件的日常维护与保养和office办公工具的应用。下面是初级计算机考试题库&#xff0c;请参考&#xff01;1.以下与信息有关的设备计算中&#xff0c;用于存储信息…

abap 添加alv上的工具栏的按钮_神器必会!“世界上最好的编辑器Source Insight”...

前言“Source Insight(以下简称SI)是世界上最好的编辑器”&#xff0c;说这句话不知道会不会出门被打呢&#xff1f;-_- 中国古话说得好&#xff0c;“文无第一&#xff0c;武无第二”&#xff0c;所以不敢说SI是最好的&#xff0c;但是说是“最好的之一”绝对是妥妥的。它以丰…