Golang new() make var []int 使用的具体区别
一、数组和切片的初始化
1 var []int 格式
func main() {var t1 []intt1 = append(t1, 1)fmt.Println(t1) //正常输出 1var t11 []intt11[0] = 11 //panic: runtime error: index out of range [0] with length 0fmt.Println(t11)var t12 [1]intt12[0] = 12fmt.Println(t12) //正常输出 12var t13 [0]intt13[0] = 13 //编译报错 Invalid array index '0' (out of bounds for the 0-element array)fmt.Println(t33)
}
注意:没有 t12.append()方法
2 make([]int) 格式
func main() {t2 := make([]int, 0)t2 = append(t2, 2)fmt.Println(t2) //正常输出 2t21 := make([]int, 0)t21[0] = 21 //panic: runtime error: index out of range [0] with length 0fmt.Println(t21)t22 := make([]int, 1)t22[0] = 22fmt.Println(t22) //正常输出 22t22=append(t22, 1)fmt.Println(t22) //正常输出 [22 ,1]t23 := make([]int, 0, 0)t23 = append(t23, 23)t23[0] = 1fmt.Println(t23) //正常输出 1t23[1] = 2 //panic: runtime error: index out of range [1] with length 1fmt.Println(t23)
}
注意:有 t22.append()方法
3 []int{} 格式
func main(){t3 := []int{}t3 = append(t3, 3)fmt.Println(t3) //正常输出 3t31 := []int{}t31[0] = 31 //panic: runtime error: index out of range [0] with length 0fmt.Println(t31)t32 := [1]int{}t32[0] = 32fmt.Println(t32) //正常输出 32t33 := [0]int{}t33[0] = 33 //编译报错 Invalid array index '0' (out of bounds for the 0-element array)fmt.Println(t33)}
注意:没有 t32.append()方法
4 new([]int)
func main(){t4 := new([]int)(*t4) = append((*t4), 4)fmt.Println(*t4) //正常输出 4t41 := new([]int) //返回的内存地址(*t41)[0] = 41 //panic: runtime error: index out of range [0] with length 0fmt.Println(*t41)t42 := new([1]int) //返回的内存地址(*t42)[0] = 42fmt.Println(*t42) //正常输出 42t43 := new([0]int) (*t43)[0] = 43 //编译报错 Invalid array index '0' (out of bounds for the 0-element array)fmt.Println(*t43)
}
注意:没有 t42.append()方法
5 场景分析
从上面的情况可以总结一下几点:
(1) var t1 []int , t2 := make([]int, 0) , t3 := []int{} , t4 := new([]int):
都有appeng方法,且 t = appeng(t,1) 可以正常插入数据;
t[0]=1 都插入数据失败,报 panic: runtime error: index out of range [0] with length
(2) var t12 [0]int, t22 := make([]int, 0,0),t32 := [0]int{}, t42 := new([0]int):
只有make([]int, 0,0) 有append方法,t=append(t,1)可以成功插入数据,
也是只有且只有make([]int, 0,0) 有t[0]=1, 且在append扩出来的空间内进行t[i]=3的赋值操作,超过会报panic;
(3) var t12 [1]int, t22 := make([]int, 1),t32 := [1]int{}, t42 := new([1]int):
只有 t22 := make([]int, 1)有append方法t = appeng(t,1)可以正常插入数据
t[0]=1 都插入数据成功
6 总结
初始化数组为nil,可以append插入数据,不能用下标t[i]=1插入数据;
初始化数值长度为0,没有append方法,t[0]=1也会在编译时报错;
初始化数组长度>0,没有append方法,用下标t[i]=1的方法可以正常插入数据;
初始化一个长度为0容量为nil的切片即make([]int, 0) ,t = appeng(t,1)可以正常插入数据;
初始化一个长度为0容量为nil的切片即make([]int, 0,0),t = appeng(t,1)可以正常插入数据;
初始化一个长度为1容量为nil的切片即make([]int, 1),t = appeng(t,1)可以正常插入数据;
7 基本规则
初始化的数组和切片,只有长度>0,且在数组和切片长度范围内可以用下标的方式赋值;
在数组长度已经确定的情况下即数组长度>=0,数组没有append()方法,需要用下标去插入数据;
切片可以比较灵活的用append方法去插入数据,但是用下标插入数据要遵循第一条规则。
二、Map的初始化
1 make(map[string]int)
func main(){var m1 = make(map[string]int)m1["a1"] = 1fmt.Println(m1) //输出 map[a1:1]
}
2 var map [string]int
func main(){var m2 map[string]intm2["a2"] = 2 //panic: assignment to entry in nil mapfmt.Println(m2)
}
认准 make(map[string]int)的用法去初始化map即可;
相关文章:
Golang new() make var []int 使用的具体区别
一、数组和切片的初始化 1 var []int 格式 func main() {var t1 []intt1 append(t1, 1)fmt.Println(t1) //正常输出 1var t11 []intt11[0] 11 //panic: runtime error: index out of range [0] with length 0fmt.Println(t11)var t12 [1]intt12[0] 12fmt.Println(t12) /…...
【Linux驱动开发】多线程调用驱动时的并发与竞争(原子操作、自旋锁、信号量、互斥锁)
【Linux驱动开发】多线程调用驱动时的并发与竞争(原子操作、自旋锁、信号量、互斥锁) 文章目录 多线程调用驱动原子操作原子变量操作原子位操作调用方法 自旋锁读写锁顺序锁调用方法 信号量互斥锁(互斥体)中断中使用附录…...
qt QComboBox详解
QComboBox是一个下拉选择框控件,用于从多个选项中选择一个。通过掌握QComboBox 的用法,你将能够在 Qt 项目中轻松添加和管理组合框组件,实现复杂的数据选择和交互功能。 重要方法 addItem(const QString &text):将一个项目添…...
redis做缓存,mysql的数据怎么与redis进行同步(双写一致性)
基于业务做选择,强一致性和允许延迟再加消息队列 强一致性:当修改了数据库的数据同时更新缓存的数据,缓存和数据库的数据保持一致 读操作:缓存命中,直接返回数据,缓存没有命中,查询数据库,写入缓存,设定过期时间 写操作:延迟双删 :先删除缓存,修改数据库,等待延迟(数据库主从节…...
WPF触发器
WPF触发器 触发器(Trigger)通常指的是一种事件驱动机制,用于响应特定的事件或条件。WPF触发器是WPF中一种强大的功能,允许开发者在样式和模板中定义条件逻辑,以响应属性值的变化。WPF提供了多种触发器来实现样式和模板…...
反序列化漏洞的运行原理及防御方法
反序列化漏洞是当前网络安全领域中的一种严重安全威胁,其运行原理和防御方法对于保障应用程序和系统安全至关重要。本文将深入探讨反序列化漏洞的运行原理,并提出有效的防御策略。 ### 反序列化漏洞的运行原理 序列化是指将对象的状态信息转换为可以存储…...
护眼大路灯哪个牌子好?口碑最好的护眼灯品牌
护眼大路灯哪个牌子好?作为一名专业的测评师,我发现有大量的家长都反应自己家孩子在学习时经常出现,揉眼睛、频繁眨眼、眼睛痒等问题,而这些问题多半是与不良光线有光,这些现象使我更加关注护眼大路灯的选择࿰…...
Redis 初学者指南
Redis 初学者指南 1. 什么是 Redis?2. Redis 的基本概念3. 安装 Redis3.1 使用 Docker 安装3.2 从源码编译安装 4. 基本操作4.1 启动 Redis 服务4.2 连接 Redis 客户端4.3 常用命令 5. Redis 的数据结构5.1 字符串5.2 列表5.3 集合5.4 散列5.5 有序集合 6. 高级特性…...
node.js_npm : 无法加载文件 D:\Program Files\nodejs\npm.ps1
这个错误信息表明 PowerShell 因为执行策略的限制而阻止了 npm.ps1 脚本的运行。PowerShell 的执行策略是一种安全功能,用于限制哪些脚本可以运行,以防止恶意脚本的执行。 要解决这个问题,你可以按照以下步骤操作: 查看当前的执行…...
技术星河中的璀璨灯塔 —— 青云交的非凡成长之路
💖💖💖亲爱的朋友们,热烈欢迎你们来到 青云交的博客!能与你们在此邂逅,我满心欢喜,深感无比荣幸。在这个瞬息万变的时代,我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…...
使用 Git 命令将本地项目上传到 GitLab
步骤详解 1. 在 GitLab 上创建一个新项目 登录你的 GitLab 账号。点击“New project”创建一个新的空项目。为项目设置名称、描述等信息。 2. 关联远程 Git 仓库 1.初始化本地 Git 仓库 git init 2.关联远程仓库: git remote add origin https://gitlab-lizz…...
JavaScript的第十三天
目录 一、使用jQuery操作属性值 操作案例: 表格的全选和反选 二、设置宽高 1、宽高属性 2、使用方式 三、offset() 和position()的区别 1、.offset():获取到document的距离,也就是窗口边…...
el-table 滚动条重置 手动控制滚动条
最近在使用 el-table 的时候,出现一个问题: 表头过长的时候,会有左右滑动的操作,当我们把表格拉到最右侧,这个时候重新请求数据的话,表格位置还是在最右侧,不会恢复原位。 那我们想恢复原位&a…...
详细分析Vue3中的provide和inject基本知识(附Demo)
目录 前言1. 基本知识2. Demo3. 拓展 前言 原先写过一篇父传子,推荐阅读:详细分析Vue3中的props用法(父传子) 实战中也常用这种方式,今天突然发现还有另外一种方式,对此进行深入探讨学习下 1. 基本知识 …...
spring集成kafka
Kafka 是一个分布式流处理平台,广泛用于构建实时数据流管道和流应用程序。它以高吞吐量、可扩展性和可靠性著称。以下是 Kafka 的实现原理详解及其在 Spring Boot 中的集成示例。 一、Kafka 实现原理 1. 架构概述 Kafka 的架构主要由以下几个组件组成:…...
el-form表单中含有el-input按回车自动刷新如何阻止
场景: 在Vue.js中使用Element UI的el-input组件时,如果按下Enter键导致页面刷新,这通常是因为表单的默认提交行为被触发了。要避免这种情况,你可以在el-input所在的表单上监听键盘事件,并阻止默认行为。 先解释一下时间…...
Spring Boot2.x教程:(十)从Field injection is not recommended谈谈依赖注入
从Field injection is not recommended谈谈依赖注入 1、问题引入2、依赖注入的三种方式2.1、字段注入(Field Injection)2.2、构造器注入(Constructor Injection)2.3、setter注入(Setter Injection) 3、为什…...
在 Android Studio 上运行 Java 的 main 函数
直接写了个main函数运行的时候提示 这时我们需要在idea目录下找到gradle.xml文件 添加 <option name"delegatedBuild" value"false" />搞定...
【Nas】X-DOC:Mac mini 安装 ZeroTier 并替换 planet 实现内网穿透
【Nas】X-DOC:Mac mini 安装 ZeroTier 并替换 planet 实现内网穿透 1、下载客户端 ZeroTier One2、安装过程3、更换planet备份原planet4、重启服务5、加入网络6、NAT内网穿透 1、下载客户端 ZeroTier One https://www.zerotier.com/download/ 选择 MacOS 适用版本&…...
Spring Boot 集成 RabbitMQ
在现代分布式系统中,消息队列扮演着至关重要的角色。它能够实现系统间的异步通信、解耦组件以及提高系统的可扩展性和可靠性。RabbitMQ 作为一款广泛使用的开源消息中间件,具有强大的功能和灵活的配置。而 Spring Boot 则是一种流行的 Java 开发框架&…...
湖南长沙正规的空调工厂名声
在湖南长沙,寻找一家正规的空调工厂并非易事,但长沙荣幸商贸有限责任公司(以下简称“荣幸商贸”)凭借其卓越的服务和优质的产品,成为了众多消费者的首选。本文将通过具体数据和案例,为您详细介绍荣幸商贸的…...
OneDrive顽固残留?高效彻底卸载指南:释放系统资源的实用方案
OneDrive顽固残留?高效彻底卸载指南:释放系统资源的实用方案 【免费下载链接】OneDrive-Uninstaller Batch script to completely uninstall OneDrive in Windows 10 项目地址: https://gitcode.com/gh_mirrors/on/OneDrive-Uninstaller 问题解析…...
5分钟快速解锁QQ音乐加密文件:qmc-decoder终极使用指南
5分钟快速解锁QQ音乐加密文件:qmc-decoder终极使用指南 【免费下载链接】qmc-decoder Fastest & best convert qmc 2 mp3 | flac tools 项目地址: https://gitcode.com/gh_mirrors/qm/qmc-decoder 你是否曾经在QQ音乐下载了喜欢的歌曲,却发现…...
终极Zotero中文文献管理指南:茉莉花插件让效率提升80%
终极Zotero中文文献管理指南:茉莉花插件让效率提升80% 【免费下载链接】jasminum A Zotero add-on to retrive CNKI meta data. 一个简单的Zotero 插件,用于识别中文元数据 项目地址: https://gitcode.com/gh_mirrors/ja/jasminum 在学术研究中&a…...
Anthropic 源代码泄露:Claude Code 安全漏洞敲响 AI 警钟
Claude Code 源代码泄露,安全防线告急 人工智能公司 Anthropic 遭遇了严重的源代码泄露事件,此次事件直接影响了其 Claude Code 工具的安全性。研究人员在泄露的代码中发现了一个关键漏洞,这一漏洞的存在使得 Claude Code 可能执行其本不愿执…...
从特征多项式到行列式:揭秘矩阵特征值之积的几何意义
1. 特征多项式:打开矩阵奥秘的钥匙 我第一次接触特征多项式时,完全被这个抽象的概念搞晕了。直到有一天,我的导师用了一个简单的比喻:"特征多项式就像是矩阵的DNA检测报告,它能告诉我们这个矩阵最本质的特性。&qu…...
承美之话小程序开发概述
承美之话小程序开发概述承美之话小程序是一款基于微信生态的社交或服务类应用,可能涉及美学分享、艺术交流、生活美学等内容。开发此类小程序需结合微信官方开发规范与业务需求,以下为关键开发要点:核心功能模块用户系统 集成微信开放能力&am…...
别再怕环路!手把手教你用锐捷RG-IS2700G交换机配置ERPS环网(附完整命令)
锐捷RG-IS2700G交换机ERPS环网实战:从零搭建高可靠企业网络 第一次接手企业园区网核心交换机的运维工作时,看到拓扑图上那个醒目的环形结构,我的手指在键盘上方悬停了整整十分钟——毕竟谁都不想成为"那个让全公司断网的新人"。直到…...
春秋云境CVE-2018-12613
1.阅读靶场介绍index.php中存在一处文件包含逻辑可以理解为对url做处理能想到的就是../../../../../flag2.启动靶场如上图所示看到这个界面我想到的就是select flag from flag出来但是本博主没有找到哟期待各位大神的评论3.poc这里博主是通过这个处理过的url夺旗的如下所示url在…...
百度网盘下载加速终极方案:免费解锁满速下载的完整指南
百度网盘下载加速终极方案:免费解锁满速下载的完整指南 【免费下载链接】baidupcs-web 项目地址: https://gitcode.com/gh_mirrors/ba/baidupcs-web 还在为百度网盘下载速度只有几十KB/s而烦恼吗?你是否曾经面对大文件下载时感到绝望?…...
