写点什么

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

作者:Java高工P7
  • 2021 年 11 月 11 日
  • 本文字数:1104 字

    阅读完需:约 4 分钟



可通过下标访问。


下标范围: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]


2.1 创建切片




func main() {


// 1.声明切片


var s1 []int


if s1 == nil {


fmt.Println("是空")


} else {


fmt.Println("不是空")


}


// 2.:=


s2 := []int{}


// 3.make()


var s3 []int = make([]int, 0)


fmt.Println(s1, s2, s3)


// 4.初始化赋值


var s4 []int = make([]int, 0, 0)


fmt.Println(s4)


s5 := []int{1, 2, 3}


fmt.Println(s5)


// 5.从数组切片


arr := [5]int{1, 2, 3, 4, 5}


var s6 []int


// 前包后不包


s6 = arr[


【一线大厂Java面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义】
浏览器打开:qq.cn.hn/FTf 免费领取
复制代码


1:4]


fmt.Println(s6)


}


切片初始化




// 全局:


var arr = [...]int{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}


var slice0 []int = arr[start:end]


var slice1 []int = arr[:end]


var slice2 []int = arr[start:]


var slice3 []int = arr[:]


var slice4 = arr[:len(arr)-1] //去掉切片的最后一个元素


// 局部:


arr2 := [...]int{9, 8, 7, 6, 5, 4, 3, 2, 1, 0}


slice5 := arr[start:end]


slice6 := arr[:end]


slice7 := arr[start:]


slice8 := arr[:]


slice9 := arr[:len(arr)-1] //去掉切片的最后一个元素


Reslice




用户头像

Java高工P7

关注

还未添加个人签名 2021.11.08 加入

还未添加个人简介

评论

发布
暂无评论
Go实战(三)-数组array、切片slice语法详解