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

相关文章
|
13天前
|
存储 JSON 监控
Viper,一个Go语言配置管理神器!
Viper 是一个功能强大的 Go 语言配置管理库,支持从多种来源读取配置,包括文件、环境变量、远程配置中心等。本文详细介绍了 Viper 的核心特性和使用方法,包括从本地 YAML 文件和 Consul 远程配置中心读取配置的示例。Viper 的多来源配置、动态配置和轻松集成特性使其成为管理复杂应用配置的理想选择。
33 2
|
11天前
|
Go 索引
go语言中的循环语句
【11月更文挑战第4天】
21 2
|
11天前
|
Go C++
go语言中的条件语句
【11月更文挑战第4天】
24 2
|
15天前
|
安全 Go
用 Zap 轻松搞定 Go 语言中的结构化日志
在现代应用程序开发中,日志记录至关重要。Go 语言中有许多日志库,而 Zap 因其高性能和灵活性脱颖而出。本文详细介绍如何在 Go 项目中使用 Zap 进行结构化日志记录,并展示如何定制日志输出,满足生产环境需求。通过基础示例、SugaredLogger 的便捷使用以及自定义日志配置,帮助你在实际开发中高效管理日志。
35 1
|
15天前
|
程序员 Go
go语言中的控制结构
【11月更文挑战第3天】
90 58
|
3天前
|
安全 Go 数据处理
Go语言中的并发编程:掌握goroutine和channel的艺术####
本文深入探讨了Go语言在并发编程领域的核心概念——goroutine与channel。不同于传统的单线程执行模式,Go通过轻量级的goroutine实现了高效的并发处理,而channel作为goroutines之间通信的桥梁,确保了数据传递的安全性与高效性。文章首先简述了goroutine的基本特性及其创建方法,随后详细解析了channel的类型、操作以及它们如何协同工作以构建健壮的并发应用。此外,还介绍了select语句在多路复用中的应用,以及如何利用WaitGroup等待一组goroutine完成。最后,通过一个实际案例展示了如何在Go中设计并实现一个简单的并发程序,旨在帮助读者理解并掌
|
2天前
|
Go 索引
go语言按字符(Rune)遍历
go语言按字符(Rune)遍历
12 3
|
6天前
|
Go API 数据库
Go 语言中常用的 ORM 框架,如 GORM、XORM 和 BeeORM,分析了它们的特点、优势及不足,并从功能特性、性能表现、易用性和社区活跃度等方面进行了比较,旨在帮助开发者根据项目需求选择合适的 ORM 框架。
本文介绍了 Go 语言中常用的 ORM 框架,如 GORM、XORM 和 BeeORM,分析了它们的特点、优势及不足,并从功能特性、性能表现、易用性和社区活跃度等方面进行了比较,旨在帮助开发者根据项目需求选择合适的 ORM 框架。
26 4
|
6天前
|
缓存 监控 前端开发
在 Go 语言中实现 WebSocket 实时通信的应用,包括 WebSocket 的简介、Go 语言的优势、基本实现步骤、应用案例、注意事项及性能优化策略,旨在帮助开发者构建高效稳定的实时通信系统
本文深入探讨了在 Go 语言中实现 WebSocket 实时通信的应用,包括 WebSocket 的简介、Go 语言的优势、基本实现步骤、应用案例、注意事项及性能优化策略,旨在帮助开发者构建高效稳定的实时通信系统。
36 1
|
9天前
|
Go
go语言中的continue 语句
go语言中的continue 语句
21 3