package main
import (
"fmt"
)
func main() {
s := []byte("")
s1 := append(s, 'a')
s2 := append(s, 'b')
fmt.Print(string(s1), string(s2))
}
输出是:
ab
aa
bb
abab
用 dlv 调试下:
Type 'help' for list of commands.
(dlv) break main.main
Breakpoint 1 set at 0x49c22b for main.main() ./t1.go:7
(dlv) continue
> main.main() ./t1.go:7 (hits goroutine(1):1 total:1) (PC: 0x49c22b)
2:
3: import (
4: "fmt"
5: )
6:
=> 7: func main() {
8: s := []byte("")
9: s1 := append(s, 'a')
10:
11: s2 := append(s, 'b')
12:
(dlv) print s
Command failed: could not find symbol value for s
(dlv) next
> main.main() ./t1.go:8 (PC: 0x49c242)
3: import (
4: "fmt"
5: )
6:
7: func main() {
=> 8: s := []byte("")
9: s1 := append(s, 'a')
10:
11: s2 := append(s, 'b')
12:
13: fmt.Print(string(s1), string(s2))
(dlv) print s
[]uint8 len: 0, cap: 842350772072, []
(dlv) next
> main.main() ./t1.go:9 (PC: 0x49c27f)
4: "fmt"
5: )
6:
7: func main() {
8: s := []byte("")
=> 9: s1 := append(s, 'a')
10:
11: s2 := append(s, 'b')
12:
13: fmt.Print(string(s1), string(s2))
14:
(dlv) print s
[]uint8 len: 0, cap: 32, []
(dlv) next
> main.main() ./t1.go:11 (PC: 0x49c2ac)
6:
7: func main() {
8: s := []byte("")
9: s1 := append(s, 'a')
10:
=> 11: s2 := append(s, 'b')
12:
13: fmt.Print(string(s1), string(s2))
14:
15: }
(dlv) print s
[]uint8 len: 0, cap: 32, []
(dlv) print s1
[]uint8 len: 1, cap: 32, [97]
(dlv) next
> main.main() ./t1.go:13 (PC: 0x49c2f1)
8: s := []byte("")
9: s1 := append(s, 'a')
10:
11: s2 := append(s, 'b')
12:
=> 13: fmt.Print(string(s1), string(s2))
14:
15: }
(dlv) print s
[]uint8 len: 0, cap: 32, []
(dlv) print s1
[]uint8 len: 1, cap: 32, [98]
(dlv) print s2
[]uint8 len: 1, cap: 32, [98]
(dlv)
最后的输出结果出乎为什么是 bb 呢?