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地址),文章请勿滥用,也希望大家尊重笔者的劳动成果

相关文章
|
11天前
|
存储 监控 算法
员工上网行为监控中的Go语言算法:布隆过滤器的应用
在信息化高速发展的时代,企业上网行为监管至关重要。布隆过滤器作为一种高效、节省空间的概率性数据结构,适用于大规模URL查询与匹配,是实现精准上网行为管理的理想选择。本文探讨了布隆过滤器的原理及其优缺点,并展示了如何使用Go语言实现该算法,以提升企业网络管理效率和安全性。尽管存在误报等局限性,但合理配置下,布隆过滤器为企业提供了经济有效的解决方案。
52 8
员工上网行为监控中的Go语言算法:布隆过滤器的应用
|
1月前
|
存储 Go 索引
go语言中数组和切片
go语言中数组和切片
41 7
|
1月前
|
Go 开发工具
百炼-千问模型通过openai接口构建assistant 等 go语言
由于阿里百炼平台通义千问大模型没有完善的go语言兼容openapi示例,并且官方答复assistant是不兼容openapi sdk的。 实际使用中发现是能够支持的,所以自己写了一个demo test示例,给大家做一个参考。
|
1月前
|
程序员 Go
go语言中结构体(Struct)
go语言中结构体(Struct)
102 71
|
30天前
|
存储 Go 索引
go语言中的数组(Array)
go语言中的数组(Array)
106 67
|
1月前
|
Go 索引
go语言for遍历数组或切片
go语言for遍历数组或切片
102 62
|
1月前
|
并行计算 安全 Go
Go语言中的并发编程:掌握goroutines和channels####
本文深入探讨了Go语言中并发编程的核心概念——goroutine和channel。不同于传统的线程模型,Go通过轻量级的goroutine和通信机制channel,实现了高效的并发处理。我们将从基础概念开始,逐步深入到实际应用案例,揭示如何在Go语言中优雅地实现并发控制和数据同步。 ####
|
6天前
|
算法 安全 Go
Go 语言中实现 RSA 加解密、签名验证算法
随着互联网的发展,安全需求日益增长。非对称加密算法RSA成为密码学中的重要代表。本文介绍如何使用Go语言和[forgoer/openssl](https://github.com/forgoer/openssl)库简化RSA加解密操作,包括秘钥生成、加解密及签名验证。该库还支持AES、DES等常用算法,安装简便,代码示例清晰易懂。
34 12
|
1月前
|
存储 Go
go语言中映射
go语言中映射
38 11
|
1月前
|
Go
go语言for遍历映射(map)
go语言for遍历映射(map)
37 12