Go语言学习 _基础03 _数组和切片
2021/8/31 6:06:43
本文主要是介绍Go语言学习 _基础03 _数组和切片,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
Go语言学习 _基础03 _数组和切片
1、数组
package array_test import "testing" func TestArrayInit(t *testing.T){ var arr [3]int // 声明方式 1 arr1 := [4]int{1,2,3,4} // 声明方式 2 arr2 :=[...]int{1,2,3,4,5} // 声明方式 3 省去对于空间大小的声明 通过初始化来确定 空间大小 arr1[1] = 5 t.Log(arr[1],arr[2]) t.Log(arr1,arr2) } func TestArrayTravel(t *testing.T){ arr3 := [...]int{1,2,3,5} for i := 0; i < len(arr3); i++{ // 传统遍历 t.Log(arr3[i]) } for idx,e :=range arr3{ t.Log(idx,e) // idx —— 索引值 } for _,e :=range arr3{ // TODO Go语言有严格的 编程约束, // TODO 如果 不关心 index 可以使用 下划线 来表示忽略此返回值,但不能没有这个 返回参数的 占位符 t.Log(e) // idx —— 索引值 } } // 数组的截取(切片) —— 切头去尾、不可使用负数 func TestArraySection(t *testing.T){ arr3 :=[...]int{1,2,3,4} arr3_sec := arr3[:] // 全部取 for idx,e :=range arr3_sec{ t.Log(idx,e) // idx —— 索引值 } arr3_sec = arr3[0:2] for idx,e :=range arr3_sec{ t.Log(idx,e) // idx —— 索引值 } }
2、切片
package slice_test import ( "fmt" "testing" ) func TestSliceInit(t *testing.T) { var s0 []int t.Log(len(s0), cap(s0)) s0 = append(s0, 1) t.Log(len(s0), cap(s0)) s1 := []int{1, 2, 3, 4} t.Log(len(s1), cap(s1)) s2 := make([]int, 3, 5) t.Log(len(s2), cap(s2)) //t.Log(s2[0],s2[1],s2[2],s2[3],s2[4]) panic: runtime error: index out of range [3] with length 3 [recovered] // panic: runtime error: index out of range [3] with length 3 t.Log(s2[0], s2[1], s2[2]) // TODO 切片的结构,本质上切片是一个结构体 由 指针 长度(len) 容量(cap) 三个要素组成 // TODO 只有 在 len 范围内 才是可访问的 元素 s2 = append(s2, 1) t.Log(len(s2), cap(s2)) t.Log(s2[0], s2[1], s2[2], s2[3]) // TODO cap 为切片的 扩充 提供了 空间 } func TestSliceGrowing(t *testing.T) { s := []int{} for i := 0; i < 10; i++ { s = append(s, i) t.Log(len(s), cap(s)) t.Log(s) fmt.Println() } // TODO 观察输出 可以看到 每次 存入新元素前 如果会是的 cap < len 那么 cap就会 变成 cap*2 // TODO 来满足增长需求,这也是 为什么 append() 操作之后要把新切片返回给原切片 因为 操作可能带来 空间位置的改变 } func TestSliceShareMeory(t *testing.T) { year := []string{"Jan", "Feb", "Mar", "Arp", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"} Q2 := year[3:6] t.Log(Q2, len(Q2), cap(Q2)) // len = 3 ,cap =9 ( cap 会一直 延伸到 这个数组结束的 位置) summer := year[5:8] t.Log(summer, len(summer), cap(summer)) summer[0] = "Unknow" t.Log(Q2) t.Log(year) // TODO 从输出 可以观察到 切片共享 内存的 特性 // TODO 如果 源自同一数组的 两个 切片 其一改变 另一个 可能会被影响 } func TestSliceComparing(t *testing.T) { //a := []int{1, 2, 3, 4} //b := []int{1, 2, 3, 4} //if a == b { // 不能进行比较 // t.Log("equal") //} // invalid operation: a == b (slice can only be compared to nil) }
这篇关于Go语言学习 _基础03 _数组和切片的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-10-25Google Cloud动手实验详解:如何在Cloud Run上开发无服务器应用
- 2024-10-24AI ?先驱齐聚 BAAI 2024,发布大规模语言、多模态、具身、生物计算以及 FlagOpen 2.0 等 AI 模型创新成果。
- 2024-10-20goland工具下,如修改一个项目的标准库SDK的版本-icode9专业技术文章分享
- 2024-10-17Go学习:初学者的简单教程
- 2024-10-17Go学习:新手入门完全指南
- 2024-10-17Golang学习:初学者入门教程
- 2024-10-17Golang学习:新手入门教程
- 2024-10-17Gozero学习指南:初学者必备教程
- 2024-10-17GoZero学习:新手入门与实践指南
- 2024-10-17Go Zero入门:新手必读指南