numbers1 := []int{1, 2, 3, 4, 5, 6} // 声明并初始化int类型的切片
for i := range numbers1 { // range子句迭代切片汇总的所以元素值
if i == 3 {
numbers1[i] |= i
}
}
fmt.Println(numbers1)
numbers2 := [...]int{1, 2, 3, 4, 5, 6} // munbers2是数组,为值类型
maxIndex2 := len(numbers2) - 1
for i, e := range numbers2 {
if i == maxIndex2 {
numbers2[0] += e
} else {
numbers2[i+1] += e
}
}
fmt.Println(numbers2)
range表达式只会在for语句开始执行时被求值一次,无论后面有多少其他操作
range表达式的求值结果会被复制,被操作的对象是range表达式结果的副本而不是原值
numbers3 := []int{1, 2, 3, 4, 5, 6} // mumber3是切片,为引用类型
maxIndex3 := len(numbers3) - 1
for i, e := range numbers3 {
if i == maxIndex2 {
numbers3[0] += e
} else {
numbers3[i+1] += e
}
}
fmt.Println(numbers3)
// 无法通过编译
value5 := [...]int8{0, 1, 2, 3, 4, 5, 6}
switch value5[4] {
case value5[0], value5[1], value5[2]:
fmt.Println("0 or 1 or 2")
case value5[2], value5[3], value5[4]:
fmt.Println("2 or 3 or 4")
case value5[4], value5[5], value5[6]:
fmt.Println("4 or 5 or 6")
}
// 可以通过编译
value5 := [...]int8{0, 1, 2, 3, 4, 5, 6}
switch value5[4] {
case value5[0], value5[1], value5[2]:
fmt.Println("0 or 1 or 2")
case value5[2], value5[3], value5[4]:
fmt.Println("2 or 3 or 4")
case value5[4], value5[5], value5[6]:
fmt.Println("4 or 5 or 6")
}