go截取数组_Go数据结构之数组与切片

本文详细介绍了Go语言中的数组和切片,包括它们的声明、初始化、添加更新元素值、表达式、遍历、比较、删除、扩容、深复制以及在传递过程中的行为差异。重点讲解了切片作为数组引用的特点以及如何通过深复制避免引用问题。
摘要由CSDN通过智能技术生成

前言

数组的长度是声明的时候就固定好的,后面不可能变大,而且长度和容量相等。

切片的长度和容量后面可以随着元素增多而增长,但是容量不可能小于长度。

正文

声明&初始化

在 Go 中声明即初始化,如果在声明的时候没有初始化值,那么就会赋值为声明类型的「零值」。func TestDemo1(t *testing.T) {

// 数组

var array1 [5]int // 只需设置长度,后面不可变

var array2 = new([5]int) // 返回指针

// 切片

var slice1 []int

var slice2 = make([]int, 5, 5) // 设置长度、容量,后面可变

t.Log("array1 val:", array1) // [0 0 0 0 0]

t.Log("array1 len:", len(array1)) // 5

t.Log("array1 cap:", cap(array1)) // 5

fmt.Println("")

t.Log("array2 val:", array2) // &[0 0 0 0 0]

t.Log("array2 len:", len(array2)) // 5

t.Log("array2 cap:", cap(array2)) // 5

fmt.Println("")

t.Log("slice1 val:", slice1) // []

t.Log("slice1 len:", len(slice1)) // 0

t.Log("slice1 cap:", cap(slice1)) // 0

fmt.Println("")

t.Log("slice2 val:", slice2) // [0 0 0 0 0]

t.Log("slice2 len:", len(slice2)) // 5

t.Log("slice2 cap:", cap(slice2)) // 5

}

在声明的时候就初始化:func TestDemo2(t *testing.T) {

// 数组

var array1 = [5]int{4: 1, 2: 5}

var array2 = [...]int{4: 1, 2: 5}

// 切片

var slice1 = []int{4: 1, 2: 5}

var slice2 = array1[:] // 从数组截取来的切片

t.Log("array1 val:", array1) // [0 0 5 0 1]

t.Log("array1 len:", len(array1)) // 5

t.Log("array1 cap:", cap(array1)) // 5

fmt.Println("")

t.Log("array2 val:", array2) // [0 0 5 0 1]

t.Log("array2 len:", len(array2)) // 5

t.Log("array2 cap:", cap(array2)) // 5

fmt.Println("")

t.Log("slice1 val:", slice1) // [0 0 5 0 1]

t.Log("slice1 len:", len(slice1)) // 5

t.Log("slice1 cap:", cap(slice1)) // 5

fmt.Println("")

t.Log("slice2 val:", slice2) // [0 0 5 0 1]

t.Log("slice2 len:", len(slice2)) // 5

t.Log("slice2 cap:", cap(slice2)) // 5

}

添加&更新元素值

数组因为长度固定,且的值都是初始化好了的,所以只有更新。

切片更新操作和数据一样,只不过新增元素只能通过 append() 方法。append():将

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值