重温Go语法笔记 | 容器
- 容器
数组的声明
// 初始化声明
q := [...]int{1,2,3} // 仅声明
var a [3]int
切片
切片的概念
对数组连续片段的引用// 根据数组生成切片
var a = [3] int {1,2,3}
fmt.Println(a[1:2]) // 初始化声明切片
a := []int{1,2,3} // 直接声明一个新的切片
var strList [] string // 使用make函数构造切片
b make([]int, 2, 10)
append 为切片添加元素
切片动态添加元素
var number [] int
number = number.append(number, 1)
切片拷贝
copy(destList, cList) // 将当前列表所有元素,拷贝到目标列表中
切片删除
// 通过下标的方式
a := []int {1,2,3}
a = a[1:] // 删除开头一个元素
// 通过append()方式
a = append(a[:0], a[1:]...) // 将第一个元素后的所有元素append到新的切片中
// 通过copy()方式
a = a[:copy(a, a[1:])]
切片的遍历
for index, value := range slice {
fmt.Println(index)
fmt.Println(value)
}
map
即使map会动态伸缩,但是最好表明
map的声明
m := make(map[string] int, 10)
n := make(map[string] []int) // 切片为map的值
n := make(map[string] *[]int)
map的遍历
for k, v in range m {
fmt.Println(k, v)
}
map元素的删除和清空
delete()函数
m := make(map[string]int)
m["name"] = "mkl"
delete(m. "name")
Go没有提供清空所有元素的函数,唯一的方法就是重新make一个map
sync.map
通常并发需要加锁,go提供了高效的sync.Map提供效率高并发安全的数据结构
1.无须初始化,直接声明
2.与map操作方式不同,使用Store存储,Load获取,Delete删除
3.遍历需要Range配合回调函数来迭代
func main() {
var m sync.Map
m.Store("name", "mkl") // 存
fmt.Println(m.Load("name")) // 取
m.Delete("name") // 删除 m.Range(func(k, v interface{}) bool {
fmt.Println(k, v)
return true // 返回false终止迭代
})
}
列表 list (双向链表)
实现高效的插入和删除
- 初始化list
m := list.New() // 方式一
var m list.List // 方式二
- 在列表中插入元素
m := list.New()
m.pushBack("end")
m.pushFront(100)
// InsertAfter()
// InsertBefore()
// PushBackList()
// PushFrontList()
- 从列表中删除元素
元素在插入时会返回 *list.Element指针
element := m.pushBack("end")
m.Remove(element)
- 遍历列表
for i:= m.Front(); i != nil; i = i.Next() { // Front表示厨师赋值
fmt.Println(i.Value)
}
- 初始化list
Go中的nil 空值/零值
布尔零值为false,数值零值为0,字符串零值"",指针、切片、映射、通道、函数和接口零值为nil
- nil标识符不能比较
- nil不是关键字或保留字
- nil没有默认类型
- 不同类型的nil指针是一样的
- 不同类型nil值占用的内存大小可能是不一样的
unsafe.Sizeof(m)
重温Go语法笔记 | 容器的更多相关文章
- SQL基础语法笔记教程整理
PS:本文适用SQL Server2008语法. 一.关系型数据库和SQL 实际上准确的讲,SQL是一门语言,而不是一个数据库. 什么是SQL呢?简而言之,SQL就是维护和使用关系型数据库中的的数据的 ...
- C语言语法笔记 – 高级用法 指针数组 指针的指针 二维数组指针 结构体指针 链表 | IT宅.com
原文:C语言语法笔记 – 高级用法 指针数组 指针的指针 二维数组指针 结构体指针 链表 | IT宅.com C语言语法笔记 – 高级用法 指针数组 指针的指针 二维数组指针 结构体指针 链表 | I ...
- SQL 基础语法笔记教程整理
最近从图书馆借了本介绍 SQL 的书,打算复习一下基本语法,记录一下笔记,整理一下思路,以备日后复习之用. PS:本文适用 SQL Server2008 语法. 首先,附一个发现的 MySQL 读书笔 ...
- [python] Pythonic语法笔记
Pythonic语法笔记 __new__ 在类实例化之前执行的,也就是在init之前执行,可以为这个类写操作.接受的参数不是self而是cls.只有在new方法里返回类才会执行init操作,需要返回父 ...
- scala学习笔记(1):基本语法与容器
1 var 可变,val 不可变 var (a,b) = (10,20) 分别对a,b赋值 a=10, b=20 var a,b = (10,20)则 是a=(10,20) b=(10,20) 2 L ...
- SQL Server 常用高级语法笔记
自从用了EF后很少写sql和存储过程了,今天需要写个比较复杂的报告,翻出了之前的笔记做参考,感觉这个笔记还是很有用的,因此发出来和园友分享. 1.case...end (具体的值)case后面有值,相 ...
- C#语言不常用语法笔记
只看过3天C#语法书,了解个大概,与C++等不同之处,或者看开源遇到一些奇异用法,记录一下,脑子不够用的情况下,还是记笔记靠谱. ==================== 顺便吐槽下,这年头得会各种编 ...
- solr使用语法笔记
http://127.0.0.1:8095/shangbiao_sale/select?sort=id+desc&fq=&wt=json&json.nl=map&q=s ...
- 重温JSP学习笔记--与日期数字格式化有关的jstl标签库
上一篇笔记写的主要是JSTL的core标签库,如果想对一些数字或者日期做一些操作或者在网页上显示指定格式的数字或日期,jstl还提供了另一个fmt标签库,这里简单介绍一下: 第一步,导入标签库: &l ...
- 重温JSP学习笔记--JSP动作标签
上一篇笔记写的是jsp的三个指令九个内置对象,这篇随笔开始写jsp的动作标签,动作标签是由服务器(Tomcat)来解释执行,与java代码一样,都是在服务器端执行的,jsp动作标签有十几多个,这里只写 ...
随机推荐
- OpenPSG:离AGI再进一步,首个开放环境关系预测框架 | ECCV'24
全景场景图生成(PSG)的目标是对对象进行分割并识别它们之间的关系,从而实现对图像的结构化理解.以往的方法主要集中于预测预定义的对象和关系类别,因此限制了它们在开放世界场景中的应用.随着大型多模态模型 ...
- Pycharm下的Django配置
阅读目录 步骤: 1.下载安装Anaconda(明确下载路径,懂得见名知意) 官网链接:https://www.anaconda.com/ 2.使用anaconda自带的小黑窗Anaconda Pro ...
- 《一篇就够系列》之HTTP详解,覆盖高频面试考点!
一.写在开头 前几篇博文大概介绍了什么是网络编程,以及网络编程的实战作用,今日起,我们将针对里面涉及到的重要知识点,进行详细的梳理与学习! 在整个WEB编程中,有个应用层的协议是我们无法跳过的,那就是 ...
- 记录一下opencv-contrib的编译使用
一.来由 公司需求进行多图拼接算法,在opencv提供的Stitcher类当中默认的算子是ORB,我想尝试使用SIFT和SURF算子,经过一番查找发现这两个算子需要opencv的超集库支持--&quo ...
- 20241120 校内模拟赛 T3 题解
题目描述 给定一个数列 \(A\),数列的元素取值范围为 \([1,m]\). 请计算有多少个非空子区间满足以下条件:该区间内每个元素的出现次数都相同(没有出现的元素视为出现 \(0\) 次). 例如 ...
- Python网络爬虫实践案例:爬取猫眼电影Top100
以下是一个Python网络爬虫的实践案例,该案例将演示如何使用Python爬取猫眼电影Top100的电影名称.主演和上映时间等信息,并将这些信息保存到TXT文件中.此案例使用了requests库来发送 ...
- Java线程:线程的调度-守护线程——Java线程:线程的调度-合并——Java线程:新特征-障碍器——Java线程:大总结
Java线程:线程的调度-守护线程 守护线程与普通线程写法上基本么啥区别,调用线程对象的方法setDaemon(true),则可以将其设置为守护线程. 守护线程使用的情况较少,但并非无用,举例 ...
- 使用 SemanticKernel 对接 Ollma
前面的 2 篇文章已经介绍了 ollama 的基本情况.我们也已经能在本地跟 LLM 进行聊天了.但是如何使用代码跟 LLM 进行交互呢?如果是 C# 选手那自然是使用 SK (SemanticKer ...
- 生产环境BigDecimal用错了,已哭晕在厕所。。。
大家好,我是苏三,又跟大家见面了. 前言 在日常开发中,很多小伙伴喜欢用 BigDecimal 来处理精确计算,比如钱.分数.比例啥的. 理论上,它比 double 或 float 更精确,但如果你用 ...
- Kubernetes集群巡检内容
1.概述 Kubernetes 集群巡检是一种监测和评估底层系统运行状况的重要手段,旨在快速发现系统中存在的潜在风险并提供修复建议.通过对 Kubernetes(K8s)集群进行定期巡检,可以有效保障 ...