Go语言探索 - 10(原创)

简介: Go语言基础系列博客用到的所有示例代码上一篇文章 主要学习了Go语言的结构体以及结构体指针,本篇文章主要学习Go语言的切片以及Map。Go语言数组的长度不可改变,但是这在一些特定场景中就不太适用,比如我们现在有一款电商商品,想统计用户的消费记录(每个用户的消费记录可能不一样,有的一天几十单有的一个季度就几单)Go语言团队基于此中提供了相较于一种灵活,功能强悍的内置类型切片("也称动态数组",这个可以理解为Java的List)。

Go语言基础系列博客用到的所有示例代码

上一篇文章 主要学习了Go语言的结构体以及结构体指针,本篇文章主要学习Go语言的切片以及Map。

Go语言数组的长度不可改变,但是这在一些特定场景中就不太适用,比如我们现在有一款电商商品,想统计用户的消费记录(每个用户的消费记录可能不一样,有的一天几十单有的一个季度就几单)Go语言团队基于此中提供了相较于一种灵活,功能强悍的内置类型切片("也称动态数组",这个可以理解为Java的List)。

与数组相比切片的长度是不固定的,可以追加元素,在追加时可能使切片的容量增大。

如何定义切片?

var 切片变量名 [ ] 数据类型 = make([ ] 数据类型, len)

也可以简写为 切片变量名 := make([ ] 数据类型, len)

或者直接:切片变量名  := [ ] 数据类型 { 1,2,3 }

img_c94939a0a5ba54548cdbe755a9b66da2.png
初始化切片

我们可以通过切片的索引获取新的切片:


img_f763104eb1777a0ef246756ecde023bc.png

其中 红色矩形内的代码 是通过我们定义好的切片,然后使用 s[0:3]  获取新的切片。这里的0代表的是startIndex 也就是切片的开始索引;3代表的是endIndex,也就是结束索引

len() 和 cap() 函数

切片是可索引的,可以通过 len() 方法获取长度。

切片提供了计算容量的方法 cap() 可以测量切片最长可以达到多少。

img_2e3eb7f1887a8d074d8e1eeb6f144ae8.png

append() 和 copy() 函数

既然切片的长度是不固定的,那么它肯定有添加元素的方法。Go语言中,切片添加元素的方法是使用 append( )。

另外,切片也是允许拷贝的,拷贝切片使用的方法是copy( )。

下面的代码,首先初始化一个空切片,然后对切片的元素进行添加 然后copy到新的切片,最后打印切片属性值。

img_b456f41ea14d70177152a6423a2cdc03.png

如何遍历切片?

img_9d6c22a0c14238c1ace3e2e56aad57d8.png
遍历切片

简单介绍完了切片,下面学习GO语言的Map(类似于Java中的Map,一个key对应一个value)

Map 是一种无序的键值对集合。Map最重要的一点是通过 key 来快速检索数据,key 类似于索引,指向数据的值。但是,Map 是无序的,我们无法决定它的返回顺序,这是因为 Map 是使用 hash 表来实现的。

如何定义 Map?以下两种方式都可以

可以使用内建函数 make :var map_变量名 map[key_数据类型]value数据类型

也可以使用 map 关键字来定义 :  变量名 := make(map[key_数据类型]value数据类型)

以下代码是Map初始化的两种写法以及向Map添加元素,根据key删除元素

img_ce9c608febc03c261a8efe27cfa4cc40.png
Map

如何遍历Map?遍历Map可以使用range关键字 进行遍历 代码如下:

img_80eceb68b99718d2347008eb85b7ee2d.png
遍历Map

本篇文章主要学习的是Go语言的切片和Map,切片本质就是一个长度不确定的动态数组,类似于Java的List;而Map也类似于Java中的Map,属于key - value 对应的结构模式。计算机语言的互通性体现在方方面面,一些思想都是互通与传承的。

如果这篇文章对你有帮助,希望各位看官留下宝贵的star,谢谢。

Ps:著作权归作者所有,转载请注明作者, 商业转载请联系作者获得授权,非商业转载请注明出处(开头或结尾请添加转载出处,添加原文url地址),文章请勿滥用,也希望大家尊重笔者的劳动成果

相关文章
|
17天前
|
Go
go语言中的数据类型
go语言中的数据类型
13 0
|
22天前
|
Go 开发者
掌握Go语言:Go语言结构体,精准封装数据,高效管理实体对象(22)
掌握Go语言:Go语言结构体,精准封装数据,高效管理实体对象(22)
|
22天前
|
安全 Go
掌握Go语言:Go语言通道,并发编程的利器与应用实例(20)
掌握Go语言:Go语言通道,并发编程的利器与应用实例(20)
|
22天前
|
存储 缓存 安全
掌握Go语言:Go语言中的字典魔法,高效数据检索与应用实例解析(18)
掌握Go语言:Go语言中的字典魔法,高效数据检索与应用实例解析(18)
|
4天前
|
数据采集 存储 Go
使用Go语言和chromedp库下载Instagram图片:简易指南
Go语言爬虫示例使用chromedp库下载Instagram图片,关键步骤包括设置代理IP、创建带代理的浏览器上下文及执行任务,如导航至用户页面、截图并存储图片。代码中新增`analyzeAndStoreImage`函数对图片进行分析和分类后存储。注意Instagram的反爬策略可能需要代码适时调整。
使用Go语言和chromedp库下载Instagram图片:简易指南
|
22天前
|
存储 安全 Go
掌握Go语言:Go语言类型转换,无缝处理数据类型、接口和自定义类型的转换细节解析(29)
掌握Go语言:Go语言类型转换,无缝处理数据类型、接口和自定义类型的转换细节解析(29)
|
1天前
|
Go 开发者
Golang深入浅出之-Go语言流程控制:if、switch、for循环详解
【4月更文挑战第21天】本文介绍了Go语言中的流程控制语句,包括`if`、`switch`和`for`循环。`if`语句支持简洁的语法和初始化语句,但需注意比较运算符的使用。`switch`语句提供多分支匹配,可省略`break`,同时支持不带表达式的形式。`for`循环有多种形式,如基本循环和`for-range`遍历,遍历时修改原集合可能导致未定义行为。理解并避免易错点能提高代码质量和稳定性。通过实践代码示例,可以更好地掌握Go语言的流程控制。
9 3
Golang深入浅出之-Go语言流程控制:if、switch、for循环详解
|
1天前
|
Go
Golang深入浅出之-Go语言函数基础:定义、调用与多返回值
【4月更文挑战第21天】Go语言函数是代码组织的基本单元,用于封装可重用逻辑。本文介绍了函数定义(包括基本形式、命名、参数列表和多返回值)、调用以及匿名函数与闭包。在函数定义时,注意参数命名和注释,避免参数顺序混淆。在调用时,要检查并处理多返回值中的错误。理解闭包原理,小心处理外部变量引用,以提升代码质量和可维护性。通过实践和示例,能更好地掌握Go语言函数。
14 1
Golang深入浅出之-Go语言函数基础:定义、调用与多返回值
|
2天前
|
程序员 Go API
【Go语言快速上手(二)】 分支与循环&函数讲解
【Go语言快速上手(二)】 分支与循环&函数讲解
|
2天前
|
Go
Golang深入浅出之-Go语言基础语法:变量声明与赋值
【4月更文挑战第20天】本文介绍了Go语言中变量声明与赋值的基础知识,包括使用`var`关键字和简短声明`:=`的方式,以及多变量声明与赋值。强调了变量作用域、遮蔽、初始化与零值的重要性,并提醒读者注意类型推断时的一致性。了解这些概念有助于避免常见错误,提高编程技能和面试表现。
18 0