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-12-20go-zero 框架的 RPC 服务 启动start和停止 底层是怎么实现的?-icode9专业技术文章分享
- 2024-12-19Go-Zero 框架的 RPC 服务启动和停止的基本机制和过程是怎么实现的?-icode9专业技术文章分享
- 2024-12-18怎么在golang中使用gRPC测试mock数据?-icode9专业技术文章分享
- 2024-12-15掌握PageRank算法核心!你离Google优化高手只差一步!
- 2024-12-15GORM 中的标签 gorm:"index"是什么?-icode9专业技术文章分享
- 2024-12-11怎么在 Go 语言中获取 Open vSwitch (OVS) 的桥接信息(Bridge)?-icode9专业技术文章分享
- 2024-12-11怎么用Go 语言的库来与 Open vSwitch 进行交互?-icode9专业技术文章分享
- 2024-12-11怎么在 go-zero 项目中发送阿里云短信?-icode9专业技术文章分享
- 2024-12-11怎么使用阿里云 Go SDK (alibaba-cloud-sdk-go) 发送短信?-icode9专业技术文章分享
- 2024-12-10搭建个人博客网站之一、使用hugo创建个人博客网站