数组 | 切片 | map | Go语言
数组
1.数组的长度需要声明
2.存储的数据类型必须一致
3.可以通过下标来访问,超出长度问报访问越界的错误
4.不支持负数索引
5.数组是值类型,传递的都是拷贝,不会对原来的对象进行修改
6.Go中不存在深拷贝和浅拷贝,都是值传递
- 初始化数组
a1 := [3] {"mkl", "klm", "lkm"}
a2 := [...] {"mkl", "klm", "lkm"}
- 多维数组初始化
// 内部的数组元素不可以使用...来声明数量
// 另起一行花括号需要加逗号 不换行可以不加
a := [...][2] string {
{"a", "b"},
{"a", "b"},
{"a", "b"},
}
- 初始化数组
切片
1.基于数组,自动扩容,更换数组
2.结构包含:地址、长度、容量
3.切片不支持直接比较,只能和nil进行比较
4.cap()获取容量(底层数组能存储的容量),len()获取长度
理解方式:切片代表一个公司,数组代表办公地点,公司人员扩充,办公地点更变,
换一个工作多的办公地点。扩容必定换了内存地址。
5.字符串也支持切片表达式
6.*对切片再进行切片,切片的上限为容量,而不是长度
7.完整切片表达式[low:high:max]
8.make函数初始化,一旦申请内存空间,就不等于nil,最好一次性将内存申请到位,避免运行时扩充消耗
9.判断切片是否为空 len(s) == 0 而不是与nil比较,nil切片没有底层数组
初始化切片
var s1 []int // 切片声明
s2 := [5]int {1,2,3,4,5}
s3 := s2[1:3] // 切片表达式,基于数组s2按索引去取,左包含,右不包含
切片再切片
a := [3]int{1, 2, 3}
b := a[0:2]
c := b[1:3]
fmt.Println(a)
fmt.Println(b)
fmt.Println(c)
// [1 2 3]
// [1 2]
// [2 3]
// 修改底层数组
a[1] = 100
fmt.Println(a)
fmt.Println(b)
fmt.Println(c)
// [1 100 3]
// [1 100]
// [100 3]
切片完整表达式
// 默认切片的容量是切片的开始索引到数组的最后
// 0 <= low < high <= max
// max 指的是high能取到的最大值 影响切片的容量
// 最终切片的容量是max-low
a := []int {1,2,3,4,5}
s1 := a[1:2:3]
fmt.Println(s1, len(s1), cap(s1))
make()初始化 申请内存空间
// 容量可以省略
a := make([]int, 2, 10) // make([]T, size, cap)
字面量初始化
s := []int{1,2,3}
切片的拷贝
a := []int {1,2,3}
b := make([]int, len(a))
copy(b, a) // 将切片a中的值拷贝到切片b中,必须声明b的长度,不然无法装载被拷贝对象a的元素
切片的遍历与append
// 索引遍历
s := []int {1,2,3,4}
for i:= 0; i< len(s); i++ {
fmt.Println(i)
}
// range遍历
for i, v := range(s) [
fmt.Println(i)
]
append()添加元素
// append() 必须接受返回值
// append()函数可能触发切片的扩容,如果不接收返回值,那么操作之后的切片对象还是原来的切片地址
// 添加单个元素
s := []string
s := append(s, "d")
// 添加一个切片中所有元素
s1 := []string{"a", "b"}
s2 := append(s, s1...)
切片删除元素
// 通过切片拼接的方式,实现根据下标删除元素的的效果
var s = []int {1,2,3}
s = append(s[:1], s[2:]...)
map
无序的key,value结构
- 初始化map
m := make(map[string]int, 10) // 可以声明容量,减少动态扩容
// 字面量初始化
m := map[string]string{
"username": "mkl"
"password": "123"
}
- 取值
v, ok := m["username"]
- 遍历
for k, v := range m {
Println(k, v)
}
- 删除
delete() 删除键值对,没有返回值
delete(m, "username")
- 初始化map
数组 | 切片 | map | Go语言的更多相关文章
- Go语言学习笔记(三)数组 & 切片 & map
加 Golang学习 QQ群共同学习进步成家立业工作 ^-^ 群号:96933959 数组 Arrays 数组是同一种数据类型的固定长度的序列. 数组是值类型,因此改变副本的值,不会改变本身的值: 当 ...
- Go语言学习之4 递归&闭包&数组切片&map&锁
主要内容: 1. 内置函数.递归函数.闭包2. 数组与切片3. map数据结构4. package介绍 5. 排序相关 1. 内置函数.递归函数.闭包 1)内置函数 (1). close:主要用来关闭 ...
- go语言学习-数组-切片-map
数组 go语言中数组的特点: 数组的长度是固定的,并且长度也是数组类型的一部分 是值类型,在赋值或者作为参数传递时,会复制整个数组,而不是指针 定义数组的语法: var arr1 = [5]int{1 ...
- golang(4):函数 & 数组 & 切片 & map & 锁
内置函数 // 1. close:主要用来关闭channel // 2. len:用来求长度,比如string.array.slice.map.channel // 3. new:用来分配内存,主要用 ...
- Go语言中的数组与数组切片
Go中的数组与C的数组一样,只是定义方法不同 c: int a[10][10] Go [10][10]int 定义并初始化 array1 := [5]int{1,2,3,4,5} 变量名 := [in ...
- go语言中的数组切片:特立独行的可变数组
go语言中的数组切片:特立独行的可变数组 初看go语言中的slice,觉得是可变数组的一种很不错的实现,直接在语言语法的层面支持,操作方面比起java中的ArrayList方便了许多.但是在使用了一段 ...
- go语言 类型:数组切片
初看起来,数组切片就像一个指向数组的指针,实际上它拥有自己的数据结构,而不仅仅是个指针.数组切片的数据结构可以抽象为以下3个变量: 1.一个指向原生数组的指针: 2.数组切片中的元素个数: 3.数组切 ...
- GO 语言学习笔记--数组切片篇
1.对于make 数组切片,长度和容量需要理解清楚: 容量表示底层数组的大小,长度是你可以使用的大小: 容量的用处在哪?在与当你用 appen d扩展长度时,如果新的长度小于容量,不会更换底层数组,否 ...
- 窥探Swift之数组安全索引与数组切片
今天是元宵节,祝大家元宵节快乐!在Swift中的数组和字典中下标是非常常见的,数组可以通过索引下标进行元素的查询,字典可以通过键下标来获取相应的值.在使用数组时,一个常见的致命错误就是数组越界.如果在 ...
- Go-常识补充-切片-map(类似字典)-字符串-指针-结构体
目录 Go 常识补充 Go 命名 打印变量类型科普 _ 关键字 命名规范相关 包目录规范 切片 多维切片 切片初始化的方法 多维切片初始化 切片删除元素(会略微影响效率 ,少用) copy 函数 打散 ...
随机推荐
- 鱼香ROS一键安装软件
一行代码-解决人生烦恼 推荐语:一行代码搭建机器人开发环境(ROS/ROS2/ROSDEP) 开源地址:https://github.com/fishros/install 一键安装指令 wget h ...
- 无套路领取《AI应用开发专栏》
最近有些时间没有更新技术文章了,都在忙着写<AI应用开发入门>专栏,专栏已整理放到了github上,有兴趣的小伙伴可以移步github阅读,地址见文末. 1.为什么写这个文档 之前陆续写了 ...
- 说说Java的类加载机制?究竟什么是双亲委派模型?
首先引入一个概念,什么是Java类加载器? 一句话总结:类加载器(class loader)用来加载 Java 类到 Java 虚拟机中. 官方总结:Java类加载器(英语:Java Classloa ...
- 20240719 CVTE 笔试
岗位:嵌入式软件开发工程师(Linux方向) 题型:20 道不定项选择题,2 道编程题 1.不定项选择题 1.1 如下哪个命令可以帮助你知道 shell 的用法 (D) more help pwd m ...
- AnytimeCL:难度加大,支持任意持续学习场景的新方案 | ECCV'24
来源:晓飞的算法工程笔记 公众号,转载请注明出处 论文: Anytime Continual Learning for Open Vocabulary Classification 论文地址:http ...
- debug指南-基础bug
基础Bug 本章节主要阐述一些最基本的bug. 虽然这些bug看起来很弱智简单,但正是因为这些小bug,让我们调代码的时间增加至少 \(2,3\) 个小时. 本系列的宗旨就是综合这些小bug极其对应解 ...
- 使用wxpython开发跨平台桌面应用,基类列表窗体的抽象封装处理
在开发一套系统框架的时候,除了关注实现系统的功能实现外,我们对于系统的各个方面都是应该精益求精,以最少的编码做最好的事情,在开发的各个层次上,包括前端后端,界面处理.后端处理.常用辅助类.控件封装等等 ...
- CSP-S2024 游记
CSP-S2024 游记 Day 0 晚上放假回家了,宵夜整了点麦当当,就去睡了. Day 1 本来想多睡会,结果到 \(7:10\) 惊醒了,发现为防止早读迟到已经进化出自动起床功能了. 准备睡回笼 ...
- Java 并发编程实战学习笔记——寻找可强化的并行性
寻找可强化的并行性 1.串行执行所有任务 代码 复制 - 运行 package net.jcip.examples; import java.util.*; /** * SingleThreadRen ...
- 频繁full gc 如何排查
频繁full gc 通常表明应用程序在内存管理方面存在问题,可能导致性能下降,下面是排查步骤和一个详细的示例 排查步骤 收集GC日志 首先,需要开启详细的GC日志,在JVM参数中添加 -XX:+Pri ...