回答

收藏

Golang 将项目附加到切片

技术问答 技术问答 282 人阅读 | 0 人回复 | 2023-09-12

为什么切片a保持不变?append()生成新切片?
/ X; G* J0 w+ p3 R9 s

    ! q4 j4 x+ ^; c; n  q! e- U
  • package mainimport  "fmt")var a = make([]int,7,8)func Test(slice []int)    slice = append(slice,100)    fmt.Println(slice)}func main()    for i := 0; i 输出:[code][0 1 2 3 5 6 100][0 1 2 3 4 5 6]
    ) G2 v" Y. B3 g. ]- e% M6 b: H) e
               2 O7 L( a, z- ^$ R: E
    解决方案:                                                                . w# Y& |) Y3 h( r9 [4 a& q
                                                                典型append用法是
9 e3 W  \/ Q9 F
    a = append(a,x)
      t' F% Y! e! V9 d! R
因为append其参数可在当地修改或返回参数的副本和附加项目取决于其输入的大小和容量。使用以前附加的切片可能会产生意想不到的结果,例如0 `& I. R3 v9 I1 k# B
    a := []int{1,2,3}a = append(a,4)fmt.Println(a)append(a[:3],5)fmt.Println(a)4 q; Q- e# H$ m) Q& x3 Z( \
可以打印
. P) g: _& s$ R+ ?: I
    [1 2 3 4][1 2 3 5]
    : o  l9 K9 N1 n2 G( N
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则