首页 > 其他分享 >golang 学习笔记 -- for

golang 学习笔记 -- for

时间:2023-08-22 10:22:30浏览次数:33  
标签:orgItems newItems -- fmt 笔记 golang item range copied

  1. for range 
    1. 遍历取不到所有元素的指针
orgItems := []int{1, 2, 3}
var newItems []*int
for _, item := range orgItems {
    fmt.Println(item) // 1 2 3
    fmt.Printf("%p\n", &item) // 每次地址都是相同的
    newItems = append(newItems, &item)
}
    
for _, item := range newItems {
    fmt.Println(*item)    
}
// expect
// 1
// 2
// 3
// actually
// 3
// 3
// 3
    原因: 因为 for-range 在遍历值类型时,其中的 item 变量是一个的拷贝,当使用 获取指针时,实际上是获取到 item 这个临时变量的指针,而 v变量在 for-range 中只会创建一次,之后循环中会被一直重复使用。 在 newItems 中保存的都是 item 这个临时变量的地址,而 &item 最终会指向 orgItems 最后一个元素的值拷贝, 所以输出的都是最后一个元素。     解决方法:
    • 使用局部变量拷贝
for _, item := range orgItems {
    copied := item
    fmt.Println(copied) // 1 2 3
    fmt.Printf("%p\n", &copied) // 每次地址都是相同的
    newItems = append(newItems, &copied)
}
    • 通过索引获取 slice 原值
for i := range orgItems {
    newItems = append(newItems, &orgItems[i])
}

 

标签:orgItems,newItems,--,fmt,笔记,golang,item,range,copied
From: https://www.cnblogs.com/qilin20/p/17647844.html

相关文章

  • EAS_编辑页面有修改不提示
    publicbooleancheckBeforeWindowClosing(){//booleanb=super.checkBeforeWindowClosing();//if((this.editData!=null)&&(this.editData.getId()!=null)){//attachmentPerform(this.attachMentTempID,this.editDa......
  • 直播平台源码搭建协议讲解篇:传输控制协议TCP
    简介:由于直播平台在当今时代发展的越来越迅速,使得直播平台的技术功能越来越智能,让用户在直播平台中能够和其他用户进行实时互动,让用户可以获取到全世界最新的资讯,让一些用户可以作为主播获得工作,让另一些用户作为观众获得放松快乐等,所以直播平台源码搭建也成为了众多创业者想要涉......
  • ubuntu关闭gonome
    手里一台ubuntu的IPMI后台管理机,平时不跑啥业务,偶尔做做nfs,ftp中转机,不需要图形界面,后台发现资源紧张,干脆把gonome一块儿关了root@santiagod:~#systemctlget-defaultgraphical.targetroot@santiagod:~#systemctlset-defaultmulti-user.targetCreatedsymlink/etc/syst......
  • JavaScript中的字符串
    在JavaScript中,用于表示文本的类型称为字符串(String)。字符串是一个不可变的有序序列,由16位值组成,其中每个值代表一个Unicode字符。字符串的length属性表示它包含的16位值的数量。JavaScript的字符串(以及数组)使用从零开始的索引,因此第一个16位值的索引是0,第二个值的索引是1,依此类推......
  • 【6.0】Linux之用户管理
    【一】什么是用户?用户指的是能够正常登录Linux或Windows系统(可以理解为你租了房子,能够正常入驻)F:那Linux与Windows系统的用户有什么区别?Q:本质都是登陆系统,只不过Linux支持多个用户同时登陆。F:难道Windows就不算多用户操作系统吗?Q:其实不是,在Windows系统中可以创建多......
  • 【8.0】Linux之特殊权限
    【一】特殊权限概述前面我们已经学习过r(读)、w(写)、x(执行)这三种普通权限,但是我们在査询系统文件权限时会发现出现了一些其他权限字母比如:[root@bgx~]#ll/usr/bin/passwd-rwsr-xr-x.1rootroot27832Jun102014/usr/bin/passwd在属主本来应该是x(执行)权限的位置......
  • 使用Pytorch和OpenCV实现视频人脸替换
    DeepFaceLab”项目已经发布了很长时间了,作为研究的目的,本文将介绍他的原理,并使用Pytorch和OpenCV创建一个简化版本。本文将分成3个部分,第一部分从两个视频中提取人脸并构建标准人脸数据集。第二部分使用数据集与神经网络一起学习如何在潜在空间中表示人脸,并从该表示中重建人脸图......
  • 【7.0】Linux之基本权限
    【一】什么是权限?我们可以把它理解为操作系统对用户能够执行的功能所设立的限制,主要用于约束用户能对系统所做的操作,以及内容访问的范围,或者说,权限是指某个特定的用户具有特定的系统资源使用权力。【二】为什么要有权限?因为系统中不可能只存在一个root用户,一定会存在多个用......
  • 3D虚拟情景仿真实训教学系统定制开发厂家_英途信息
    3D虚拟情景实训教学系统是一种基于虚拟现实技术,3D视觉技术,计算机技术等来模拟真实场景和环境的教学工具,可以用在教育领域中,如口译训练。1、真实场景模拟:3D虚拟情景实训教学系统可以模拟真实的场景和环境,例如会议室、展厅、酒店等,让学生在虚拟的环境中进行口译训练。这种真实场景......
  • Exception during pool initialization
    idea运行微服务时报错Exceptionduringpoolinitialization,具体报错如下:java.sql.SQLException:Accessdeniedforuser'root'@'localhost'(usingpassword:YES)原因之一是因为代码中.yml配置文件中配置的数据库用户名和密码,与实际idea中连接数据库的用户名和密码不匹配......