Golang append()受fmt.Println()影响的奇怪行为

Sal*_*ter 5 go

我注意到Golang的append()有一些奇怪的行为.我理解切片容量如何影响新的底层数组是否被分配的基本概念,但是为什么我是否使用了fmt.Println()追加已发生影响追加结果的AFTER?

package main

import "fmt"

func main() {
    a := []byte("AAA")

    b := append(a, []byte("BBB")...)
    fmt.Println(" a: ", string(a), " b: ", string(b))

    c := append(a, []byte("CCC")...)
    fmt.Println(" a: ", string(a), " b: ", string(b), " c: ", string(c))

    fmt.Println(&b) //try commenting this out and in and running the program
}
Run Code Online (Sandbox Code Playgroud)

链接到运行代码:https://play.golang.org/p/jJ-5ZxTBIn

小智 3

你是对的:那是因为Go Playground版本是旧的(go1.6.2),请使用新版本。


正确的输出(使用go version go1.7rc6)是:

 a:  AAA  b:  AAABBB
 a:  AAA  b:  AAACCC  c:  AAACCC
Run Code Online (Sandbox Code Playgroud)

1- 围棋游乐场 ( go1.6.2):

 a:  AAA  b:  AAABBB
 a:  AAA  b:  AAACCC  c:  AAACCC
Run Code Online (Sandbox Code Playgroud)

输出:

 a:  AAA  b:  AAABBB
 a:  AAA  b:  AAABBB  c:  AAACCC
Run Code Online (Sandbox Code Playgroud)

2- 围棋游乐场 ( go1.6.2):

package main

import "fmt"

func main() {
    a := make([]byte, 100, 1000)
    a = []byte("AAA")

    b := append(a, []byte("BBB")...)
    fmt.Println(" a: ", string(a), " b: ", string(b))

    c := append(a, []byte("CCC")...)
    fmt.Println(" a: ", string(a), " b: ", string(b), " c: ", string(c))

    //fmt.Println(&b) //try commenting this out and in and running the program
}
Run Code Online (Sandbox Code Playgroud)

输出:

 a:  AAA  b:  AAABBB
 a:  AAA  b:  AAACCC  c:  AAACCC
&[65 65 65 67 67 67]
Run Code Online (Sandbox Code Playgroud)

使用go version go1.7rc6

 a:  AAA  b:  AAABBB
 a:  AAA  b:  AAABBB  c:  AAACCC
Run Code Online (Sandbox Code Playgroud)

输出 :

 a:  AAA  b:  AAABBB
 a:  AAA  b:  AAACCC  c:  AAACCC
Run Code Online (Sandbox Code Playgroud)