golang中切片的[a:]和[a:b]操作的区别

问题描述 投票:0回答:1
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
中的切片方法会导致恐慌)

arrays go slice
1个回答
0
投票

也许这有帮助(去游乐场):

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))
}
© www.soinside.com 2019 - 2024. All rights reserved.