go语言中range关键字
参考 https://www.php.cn/be/go/500181.html
/*
Go 语言中 range 关键字用于for循环中迭代数组(array)、切片(slice)、通道(channel)或集合(map)的元素
*/
package main
import (
"fmt"
)
type mystruct struct {
Bar string
}
func main() {
//mystruct{"bar1"},直接初始化mystruct
mylist := []mystruct{mystruct{"bar1"}, mystruct{"bar2"}, mystruct{"bar3"}}
//key是for range 循环返回的键
//value是for range 循环返回的值的拷贝。
//注意 value 是一个数组元素值的拷贝, 而不是数组元素本身
for key, value := range mylist {
value.Bar = "初始化的值:" + string(key)
}
//mylist内的结构体内容并没有改变
fmt.Println(mylist) //输出结果是:[{bar1} {bar2} {bar3}]
/***********************************************
如果想修改数组元素需要使用下标进行修改
//vv循环代表一个结构体,mylist里面有三个结构体
************************************************/
for i, vv := range mylist {
mylist[i].Bar = "改变了:" + string(i)
fmt.Printf("原来的:%s\n",vv.Bar)
fmt.Printf("改变的:%s\n",mylist[i].Bar)
}
fmt.Println(mylist)
fmt.Println("###############################")
//测试下面的例子
//for range 中的 v 这个副本只会初始化一次。
List := []int{1, 2, 3}
for k, v := range List {
fmt.Printf("地址没变---------------------:%p\n",&v) //v地址始终不变
fmt.Printf("输出结果key是%d :value: %d\n",k,v)
}
var (
v1 int
a1 int
b1 int
c1 int
)
a1=1
v1=a1
b1=2
v1=b1
c1=3
v1=c1
//v的地址始终不变
fmt.Println(v1)
//遍历字符串——获得字符
var str = "hello 你好"
for key, value := range str {
fmt.Printf("key:%d value:0x%x\n", key, value)
}
for i := 0; i < 10; i++ {
fmt.Printf("--:%d", i)
}
}