Go实战(三)-数组array、切片slice语法详解(上)

简介: 数组:同一种数据类型的固定长度的序列。切片是数组的一个引用,因此切片是引用类型。但自身是结构体,值拷贝传递。切片的长度可以改变,因此,切片是一个可变的数组。

1 数组

同一种数据类型的固定长度的序列。

1.1 数组定义

语法:var a [len]int
e.g.:var a [5]int

数组长度必须是常量,且是类型的组成部分。一旦定义,长度不能变。

  • 长度是数组类型的一部分
    因此,var a[5] intvar a[10]int是不同类型。

1.2 数组访问

可通过下标访问。

下标范围:0~len-1

for i := 0; i < len(a); i++ {
}
for index, v := range a {
}

为何使用 range

意义明确,美观

C++ :没有类似能力

Java/Python :只能for each value ,不能同时获取i, V


  • 访问越界
    如果下标在数组合法范围之外,则触发访问越界,会panic

1.3 数组是值类型

赋值和传参会复制整个数组,而非指针。因此改变副本的值,不会改变本身的值。

[10]int[20]int是不同类型

调用func f(arr [10]int) 会拷贝数组,

支持 “==”、"!=" 操作符,因为内存总是被初始化过的。

但如果我们就是想引用传递的效果呢?

  • 指针数组 [n]*T
  • 数组指针 *[n]T
    太复杂了,所以Go 一般不直接使用数组,而是切片。

2 切片

slice 并不是数组或数组指针,Slice本身没有数据,是对底层array的一个视图。

它通过内部指针和相关属性引用数组片段,以实现变长方案。

切片是数组的一个引用,因此切片是引用类型。但自身是结构体,值拷贝传递。

切片的长度可以改变,因此,切片是一个可变的数组。

切片遍历方式和数组一样,可以用len()求长度。表示可用元素数量,读写操作不能超过该限制。

cap可以求出slice最大扩张容量,不能超出数组限制。0 <= len(slice) <= len(array),其中array是slice引用的数组。

切片的定义:var 变量名 []类型,比如 var str []string var arr []int。

如果 slice == nil,那么 len、cap 结果都等于 0。

arr := [...]int{0, 1, 2, 3, 4, 5, 6, 7}
s := arr[2:6]
s[0] = 10
arr变为[0, 1, 10, 3, 4, 5, 6, 7]
目录
相关文章
|
1月前
|
运维 监控 Go
Go语言微服务实战与最佳实践
【2月更文挑战第14天】本文将深入探讨使用Go语言进行微服务实战中的最佳实践,包括服务拆分、API设计、并发处理、错误处理、服务治理与监控等方面。通过实际案例和详细步骤,我们将分享如何在Go语言环境中构建高效、稳定、可扩展的微服务系统。
|
2月前
|
中间件 Go 数据库
Go开发者必读:Gin框架的实战技巧与最佳实践
在当今快速发展的互联网时代,Web开发的需求日益增长。Go语言以其简洁、高效、并发性强的特点,成为了开发者们的首选。而在Go语言的众多Web框架中,Gin无疑是其中的佼佼者。本文将深入探讨Gin框架的特性、优势以及如何利用Gin构建高性能的Web应用。
|
2月前
|
安全 Go
这一次,带你深入浅出Go语言切片和数组
这一次,带你深入浅出Go语言切片和数组
35 0
|
2月前
|
JavaScript 前端开发
总结TypeScript 的一些知识点:TypeScript Array(数组)(下)
一个数组的元素可以是另外一个数组,这样就构成了多维数组(Multi-dimensional Array)。
|
23天前
|
存储 安全 编译器
掌握Go语言:精通Go语言范围(range),高级应用及进销存系统实战(25)
掌握Go语言:精通Go语言范围(range),高级应用及进销存系统实战(25)
|
1月前
|
设计模式 缓存 安全
一篇文章带你吃透Go语言的Atomic和Channel--实战方法
一篇文章带你吃透Go语言的Atomic和Channel--实战方法
29 0
|
1月前
|
SQL 机器学习/深度学习 缓存
Go语言Web应用实战与案例分析
【2月更文挑战第21天】本文将通过实战案例的方式,深入探讨Go语言在Web应用开发中的应用。我们将分析一个实际项目的开发过程,展示Go语言在构建高性能、可扩展Web应用方面的优势,并分享在开发过程中遇到的问题和解决方案,为读者提供宝贵的实战经验。
|
1月前
|
Go C++
【力扣】2645. 构造有效字符串的最小插入数(动态规划 贪心 滚动数组优化 C++ Go)
【2月更文挑战第17天】2645. 构造有效字符串的最小插入数(动态规划 贪心 滚动数组优化 C++ Go)
31 8
|
1月前
|
关系型数据库 MySQL 数据库连接
实战演练:使用Go语言和ORM框架与数据库进行交互
【2月更文挑战第13天】本文将通过一个实战演练,展示如何使用Go语言和ORM(对象关系映射)框架与数据库进行交互。我们将选择一个流行的ORM框架,如GORM,来完成这个任务。通过实际编码,我们将演示如何连接数据库、执行CRUD操作、处理错误和异常,并展示ORM框架如何简化数据库操作过程。
|
1月前
|
JSON Go API
Go语言网络编程:HTTP客户端开发实战
【2月更文挑战第12天】本文将深入探讨使用Go语言开发HTTP客户端的技术细节,包括发送GET和POST请求、处理响应、错误处理、设置请求头、使用Cookie等方面。通过实例演示和代码解析,帮助读者掌握构建高效、可靠的HTTP客户端的关键技术。