Golang基础之range

 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)
  } 

}

posted @ 2023-02-20 14:35  jinzi  阅读(35)  评论(0编辑  收藏  举报