我注意到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)
| 归档时间: |
|
| 查看次数: |
212 次 |
| 最近记录: |