因为遍历myviewlist时,实际上是复制myviewlist数组/切片中的元素到局部变量vw中。局部变量vw的地址当然和myviewlist[0]的地址不一样。
创新互联建站专注于网站建设|网站维护公司|优化|托管以及网络推广,积累了大量的网站设计与制作经验,为许多企业提供了网站定制设计服务,案例作品覆盖餐厅设计等行业。能根据企业所处的行业与销售的产品,结合品牌形象的塑造,量身策划品质网站。
仅为个人阅读时遇到的困惑的理解,希望友善讨论
2021.6.25
《GO语言圣经》-《GO程序设计语言》
P5
在命令行中运行
go run main.go 一 二三 四
得到的结果
在命令行中运行
go run main.go 一 二三 四
得到的结果
range 获取一个范围,
有两个返回值,在本例中分别是 i 和 arg 。
第一个返回值 i 总是从0开始的,和 range 取范围的值(也就是本例中的 os.Args )无关。(也就是本例中 os.Args[1:] 虽然是从 os.Args 的1值开始取的,但是在 range 中还是0)。
第二个返回值 arg 是切片的结果。
我理解的: range 将 os.Args 切成一个数组,先返回数组下标,再返回数组内容。
你把它理解为遍历么,结合for循环。
假设有一个初始化好的数组(table)或者切片(slice)的table,且table长度为10:
for i, value := range table {
fmt.Printf("i=%v, value=%v\n", i, value)
}
则会执行fmt.Printf10次,且这10次的【i】的值分别是从0~9,也就相当于
for i := 0; i len(table); i++ {
fmt.Printf("i=%v, value=%v\n", i, table[i])
}
如果把上边的数组或者切片换成map
for key, value := range table {
fmt.Pritnf("key=%v, value=%v\n", key, value)
}
则类似上边的过程把map里边的key-value键值对一 一遍历