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]
目录
相关文章
|
25天前
|
测试技术 Go API
Go 切片导致 rand.Shuffle 产生重复数据的原因与解决方案
在 Go 语言开发中,使用切片时由于其底层数据共享特性,可能会引发意想不到的 Bug。本文分析了 `rand.Shuffle` 后切片数据重复的问题,指出原因在于切片是引用类型,直接赋值会导致底层数组共享,进而影响原始数据。解决方案是使用 `append` 进行数据拷贝,确保独立副本,避免 `rand.Shuffle` 影响原始数据。总结强调了切片作为引用类型的特性及正确处理方法,确保代码稳定性和正确性。
115 82
|
3月前
|
存储 Go 索引
go语言中数组和切片
go语言中数组和切片
62 7
|
4月前
|
Go 索引
Go语言中,遍历数组或切片
在Go语言中,遍历数组或切片
100 6
|
19天前
|
存储 Go
Go 语言入门指南:切片
Golang中的切片(Slice)是基于数组的动态序列,支持变长操作。它由指针、长度和容量三部分组成,底层引用一个连续的数组片段。切片提供灵活的增减元素功能,语法形式为`[]T`,其中T为元素类型。相比固定长度的数组,切片更常用,允许动态调整大小,并且多个切片可以共享同一底层数组。通过内置的`make`函数可创建指定长度和容量的切片。需要注意的是,切片不能直接比较,只能与`nil`比较,且空切片的长度为0。
Go 语言入门指南:切片
|
19天前
|
存储 算法 Go
Go语言实战:错误处理和panic_recover之自定义错误类型
本文深入探讨了Go语言中的错误处理和panic/recover机制,涵盖错误处理的基本概念、自定义错误类型的定义、panic和recover的工作原理及应用场景。通过具体代码示例介绍了如何定义自定义错误类型、检查和处理错误值,并使用panic和recover处理运行时错误。文章还讨论了错误处理在实际开发中的应用,如网络编程、文件操作和并发编程,并推荐了一些学习资源。最后展望了未来Go语言在错误处理方面的优化方向。
|
3月前
|
存储 Go 索引
go语言中的数组(Array)
go语言中的数组(Array)
129 67
|
3月前
|
Go 索引
go语言for遍历数组或切片
go语言for遍历数组或切片
153 62
|
4月前
|
Go 索引
go语言遍历数组和切片
go语言遍历数组和切片
33 2
|
4月前
|
Go
|
9月前
|
Go
go语言数组与切片
go语言数组与切片

热门文章

最新文章