range map
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("\n")
}
//数组遍历值拷贝行为会造成性能问题,建议数组遍历使用引用类型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\n", 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 \n", 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",
//}
}
浙公网安备 33010602011771号