https://segmentfault.com/a/

Big Endian 转换 Little Endian

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
Big Endian
低地址 高地址
----------------------------------------->
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 12 | 34 | 56 | 78 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Little Endian
低地址 高地址
----------------------------------------->
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 78 | 56 | 34 | 12 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
package main
import (
"fmt"
)
func LTB(inputb []byte) (r []byte) {
for i := len(inputb); i > 0; i-- {
r = append(r, inputb[i-1])
}
return r
}
func main() {
b := []byte{0x18, 0x2d, 0x44, 0x54, 0xfb, 0x21, 0x09, 0x40}
for _, v := range b {
fmt.Printf("%x ", v)
}
fmt.Println()
ob := LTB(b)
for _, v := range ob {
fmt.Printf("%x ", v)
}
}
[ `go run LTB.go` | done: 156.289215ms ]
18 2d 44 54 fb 21 9 40
40 9 21 fb 54 44 2d 18
[ ~/WorkSpace/ ] #

Deffer 执行顺序

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
package main
import (
"fmt"
)
func A() {
fmt.Println("I'm A")
}
func B() {
fmt.Println("I'm B")
}
func C() {
fmt.Println("I'm C")
}
func D() {
fmt.Println("I'm D")
}
func main() {
defer A()
defer B()
defer func() {
defer C()
D()
}()
}

我跟面试官说的是要么A 要么D 结果面试官说是C 果断的执行一波

1
2
3
4
5
6
[ `go run DEFFER.go` | done: 140.839637ms ]
I'm D
I'm C
I'm B
I'm A
[ ~/WorkSpace/ ] #

有关 channel 阻塞我还没弄明白回头补上