```go
1:sum := 0
2:for i := 0; i < 10; i++ {
3:sum += i
4:} //这行以上好理解,我能懂
5:list := []string{"aaa", "bbb", "ccc"} //请问1,这里list的值是切片么?好像不是数组。
6:for _,v := range list{ //请问2,这_,与range配合起到啥作用?这个程序好像是死循环啊
7:fmt.Print("%s", v)
8:}
//(右边是原文注释)这里使用了一个range,key和value分别是int和string类型,key是序号,从0开始,value是值
```
这是我学习时遇到的一个例子注释是我的疑问。请路过的老师扶一把,谢谢。
更多评论
能排得整齐些吗?
1. list是切片,字符串切片
2. 与range配合,作用同上,就是循环。这是惯用法。for后面少了一个"_"(不含引号),还有fmt.print是不是少了个"f",应该是fmt.printf吧。
#1
package main
import (
"fmt"
)
func main() {
sum := 0
for i := 0; i < 10; i++ {
sum += i
} //这行以上好理解,我能懂
list := []string{"aaa", "bbb", "ccc"} //请问1,这里list的值是切片么?好像不是数组。
for _, v := range list { //请问2,这_,与range配合起到啥作用?这个程序好像是死循环啊
fmt.Print("%s", v)
}
}
//我也是新手,回复下我的理解,如果错误多多指教
1:数组和切片的区别
数组是值类型,赋值和传参会复制整个数组,而不是指针。
数组长度必须是常量,且是类型的组成部分。[2]int 和 [3]int 是不同类型。
支持 "=="、"!=" 操作符,因为内存总是被初始化过的。
指针数组 [n]*T,数组指针 *[n]T。
a := [2]int{1, 2} // 未初始化元素值为 0。
b := [...]int{1, 2, 3, 4} // 通过初始化值确定数组长度。
c := [5]int{2: 100, 4:200} // 使用索引号初始化元素。
slice 并不是数组或数组指针。它通过内部指针和相关属性引用数组片段,以实现变长方案
引用类型。但自身是结构体,值拷贝传递。
属性 len 表示可用元素数量,读写操作不能超过该限制。
属性 cap 表示最大扩张容量,不能超出数组限制。
如果 slice == nil,那么 len、cap 结果都等于 0。
data := [...]int{0, 1, 2, 3, 4, 5, 6}
slice := data[1:4:5] // [low : high : max]
2:range 和 _我的理解
_ 匿名的K,在写for循环的时候,我记住这个是range的用法 key,value := range list
#2