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 开发框架&…...
Mybatis逆向工程,动态创建实体类、条件扩展类、Mapper接口、Mapper.xml映射文件
今天呢,博主的学习进度也是步入了Java Mybatis 框架,目前正在逐步杨帆旗航。 那么接下来就给大家出一期有关 Mybatis 逆向工程的教学,希望能对大家有所帮助,也特别欢迎大家指点不足之处,小生很乐意接受正确的建议&…...
《从零掌握MIPI CSI-2: 协议精解与FPGA摄像头开发实战》-- CSI-2 协议详细解析 (一)
CSI-2 协议详细解析 (一) 1. CSI-2层定义(CSI-2 Layer Definitions) 分层结构 :CSI-2协议分为6层: 物理层(PHY Layer) : 定义电气特性、时钟机制和传输介质(导线&#…...
【SQL学习笔记1】增删改查+多表连接全解析(内附SQL免费在线练习工具)
可以使用Sqliteviz这个网站免费编写sql语句,它能够让用户直接在浏览器内练习SQL的语法,不需要安装任何软件。 链接如下: sqliteviz 注意: 在转写SQL语法时,关键字之间有一个特定的顺序,这个顺序会影响到…...
【算法训练营Day07】字符串part1
文章目录 反转字符串反转字符串II替换数字 反转字符串 题目链接:344. 反转字符串 双指针法,两个指针的元素直接调转即可 class Solution {public void reverseString(char[] s) {int head 0;int end s.length - 1;while(head < end) {char temp …...
spring:实例工厂方法获取bean
spring处理使用静态工厂方法获取bean实例,也可以通过实例工厂方法获取bean实例。 实例工厂方法步骤如下: 定义实例工厂类(Java代码),定义实例工厂(xml),定义调用实例工厂ÿ…...
python爬虫:Newspaper3k 的详细使用(好用的新闻网站文章抓取和解析的Python库)
更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 一、Newspaper3k 概述1.1 Newspaper3k 介绍1.2 主要功能1.3 典型应用场景1.4 安装二、基本用法2.2 提取单篇文章的内容2.2 处理多篇文档三、高级选项3.1 自定义配置3.2 分析文章情感四、实战案例4.1 构建新闻摘要聚合器…...
Python爬虫(一):爬虫伪装
一、网站防爬机制概述 在当今互联网环境中,具有一定规模或盈利性质的网站几乎都实施了各种防爬措施。这些措施主要分为两大类: 身份验证机制:直接将未经授权的爬虫阻挡在外反爬技术体系:通过各种技术手段增加爬虫获取数据的难度…...
MySQL 8.0 OCP 英文题库解析(十三)
Oracle 为庆祝 MySQL 30 周年,截止到 2025.07.31 之前。所有人均可以免费考取原价245美元的MySQL OCP 认证。 从今天开始,将英文题库免费公布出来,并进行解析,帮助大家在一个月之内轻松通过OCP认证。 本期公布试题111~120 试题1…...
JUC笔记(上)-复习 涉及死锁 volatile synchronized CAS 原子操作
一、上下文切换 即使单核CPU也可以进行多线程执行代码,CPU会给每个线程分配CPU时间片来实现这个机制。时间片非常短,所以CPU会不断地切换线程执行,从而让我们感觉多个线程是同时执行的。时间片一般是十几毫秒(ms)。通过时间片分配算法执行。…...
tomcat指定使用的jdk版本
说明 有时候需要对tomcat配置指定的jdk版本号,此时,我们可以通过以下方式进行配置 设置方式 找到tomcat的bin目录中的setclasspath.bat。如果是linux系统则是setclasspath.sh set JAVA_HOMEC:\Program Files\Java\jdk8 set JRE_HOMEC:\Program Files…...
