range
package main import ( "fmt" ) func main() { var str1 string = "oldboy" for k1, v1 := range str1 { fmt.Println(k1, string(v1)) } //for range 包含中文的字符串,英文字符 key 值按照+1顺序递增,中文字符 key 值按照+3顺序递增 var str2 string = "老男孩IT教育,只培养技术精英。" for k2, v2 := range str2 { fmt.Println(k2, string(v2)) } //for range 数组程序会复制对象,key、value 都是从复制品中取出,想要修改值循环数组的地址 arr := [5]int{1, 2, 3, 4, 5} for k, v := range arr { if k == 0 { arr[0], arr[1] = 1000, 1000 fmt.Println("修改原数组:", arr) //[1000 1000 3 4 5] } // 使用复制品中取出的 value 修改原数组 arr[k] = v + 100 // [101 102 103 104 105] } fmt.Println(arr) //多维数组遍历 var arr2 [2][3]int = [2][3]int{{1, 2, 3}, {2, 4, 6}} for k1, v1 := range arr2 { for k2, v2 := range v1 { fmt.Printf("%d*%d=%d ", k1+1, k2+1, v2) } fmt.Printf(" ") } //数组遍历值拷贝行为会造成性能问题,建议数组遍历使用引用类型slice,或数组指针 arr3 := [5]int{1, 2, 3, 4, 5} arrP := &arr3 for k, _ := range arrP { if k == 0 { arrP[0], arrP[1] = 1000, 1000 fmt.Println("修改原数组:", arr3) } arrP[k] += 100 } fmt.Println(arr3) //将所需数据 copy 到较小的 slice,以便释放底层数组内存 arr4 := [...]int{0, 1, 2, 3, 4, 5, 6, 7, 8, 9} slice := arr4[:] for key, value := range slice { fmt.Printf("key: %v , value : %v ", key, value) } //map 遍历不能保证迭代返回次序,通常是随机结果,具体和版本实现有关 m := map[int]string{ 1: "oldboy", 2: "Linux", 3: "Golang", 4: "Python", 5: "Java", 6: "DBA", } for k, v := range m { fmt.Printf("%d => %s ", k, v) } //channel 遍历 var ch chan int ch = make(chan int, 10) for i := 0; i < 10; i++ { ch <- i } close(ch) for v := range ch { fmt.Println(v) } //如果没有 close() 因为存入管道10个数字,然后无限取数据,在取出来第10个数据,再次range管道,会dead lock }
map 集合
package main import "fmt" //可以使用内建函数 make 也可以使用 map 关键字来定义 Map /* 声明变量,默认 map 是 nil var map_variable map[key_data_type]value_data_type 使用 make 函数 map_variable := make(map[key_data_type]value_data_type) */ func main() { var m = map[int]string{ //初始化集合,我喜欢的方式 1: "oldboy", 2: "Linux", 3: "Golang", } /* var m=map[int]string m = make(map[int]string) 这是正规的初始化方法 */ m[4]="java" //新增键值对 delete(m,1) //删除键值对 for k,v :=range m{ fmt.Println(k,v) } //m := map[int]string{ //快速定义集合 // 1: "oldboy", // 2: "Linux", // 3: "Golang", //} }