切片的长度和容量

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
package main

import "fmt"


func main(){

a := []byte("0123456789")

fmt.Printf("[a_src] len: %v\n", len(a))
fmt.Printf("[a_src] cap: %v\n", cap(a))

b := make([]byte, 5)
copy(b, a[:5])
fmt.Printf("[b_cpy] len: %v\n", len(b))
fmt.Printf("[b_cpy] cap: %v\n", cap(b))

a = a[:5]

fmt.Printf("[a_dst] len: %v\n", len(a))
fmt.Printf("[a_dst] cap: %v\n", cap(a))


}


结果为:

1
2
3
4
5
6
[a_src] len: 10
[a_src] cap: 10
[b_cpy] len: 5
[b_cpy] cap: 5
[a_dst] len: 5
[a_dst] cap: 10


参考:

golang中slice扩容一定是double或1.25倍吗



defer,以及return不是原子操作的问题

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
package main

import "fmt"

func Add200(z *int) int {
fmt.Println("Add200:", *z)
*z += 200
return *z
}

func deferRet(x, y int) (z int) {
defer func() {
fmt.Println("func:", z)
z += 100
}()
z = x + y
return Add200(&z)
}

func main() {
i := deferRet(1, 1)
fmt.Println("main:", i)
}


结果为:

1
2
3
Add200: 2
func: 202
main: 302

参考:

Golang中的defer