看到这段代码感觉很迷惑,请帮我解释一下。
代码:
package main
import "fmt"
func main() {
s := make([]int, 0, 10)
s1 := s[0:1]
s1[0] = 1
println("-----")
fmt.Println(s1, len(s1), cap(s1)) //[1] 1 10
fmt.Println(s, len(s), cap(s)) //[] 0 10
fmt.Println(s, s[0:10]) // [] [1 0 0 0 0 0 0 0 0 0]
}
上面的程序可以完美执行,虽然打印值不符合我的预期,我有两个问题:
为什么 s1 打印值为:[1],而 s 打印值为 [] 在fmt.Println(s1, len(s1), cap(s1))
andfmt.Println(s, len(s), cap(s))
中。我认为 s1 值等于 s 值是 [1]。
为什么 s[0:10] 可能打印 [1 0 0 0 0 0 0 0 0 0],而 s 打印 []。我认为s[0:10]是s的再分片,如果s是[],s[0:10]也是[]。
手掌心
相关分类