a := [...]int{1, 2, 3, 4, 5}
s1 := a[:1]
fmt.Println(s1) // [1]
s2 := s1[1:]
fmt.Println(s2) // []
s3 := s1[2:4]
fmt.Println(s3) // [3 4]
我多次尝试去理解这个示例代码中的情况,但都失败了。在我看来,
s2
和s3
是矛盾的。我想知道是否有任何好的文章或相关资源可以帮助我理解为什么会出现这种情况。 (我尝试询问GPT,但GPT始终认为s3
中的切片方法会导致恐慌)
也许这有帮助(去游乐场):
package main
import "fmt"
func main() {
a := [...]int{1, 2, 3, 4, 5}
fmt.Printf("a is %T, &a[0]=%p, &a[2]=%p, cap(a)=%d\n", a, &a[0], &a[2], cap(a))
s1 := a[:1]
fmt.Printf("s1 is %T, &s1[0]=%p, cap(s1)=%d\n", s1, &s1[0], cap(s1))
s3 := s1[2:4]
fmt.Printf("s3 is %T, &s3[0]=%p, cap(s3)=%d\n", s3, &s3[0], cap(s3))
}