(1)
第一条不算坑,算做优化吧,对于临时变量应该尽量使用栈空间,所以最好不要去make,但有时候需要使用slice,我们对slice的认知是必须先make才能使用的,其实不然,如下:
var b [5]byte
var bs []byte
bs = b[0:5]
copy(b[0:5], “hello”)
copy(bs, “world”)
其中b是数组,bs是slice。
(2)
这是坑,刚刚哥就被坑了—-莫名的panic,此时可以尝试去删除 GOPATH/pkg/ 目录下对应的.a文件,因为你的包是go get下来的,会自动编译成.a文件,如果后期又更新了代码但.a没有重新生成,那么有可能会出现这个问题。
(3)
这不是坑,深入理解defer语句,注意下面最后一个代码:
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 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 | // output: 1 package main import ( "fmt" ) func test() (r int) { defer func() { r = 1 return }() r = 2 return 3 } func main() { r := test() fmt.Println(r) } // output: 1 package main import ( "fmt" ) func test() (r int) { defer func() { r = 1 }() r = 2 return 3 } func main() { r := test() fmt.Println(r) } // output: 1 package main import ( "fmt" ) func test() (r int) { defer func() { r = 1 }() r = 2 return r } func main() { r := test() fmt.Println(r) } // output: 12 package main import ( "fmt" ) func test() (r int) { defer func() { r += 10 }() r = 2 return r } func main() { r := test() fmt.Println(r) } // output: 13 package main import ( "fmt" ) func test() (r int) { defer func() { r += 10 }() r = 2 return 3 } func main() { r := test() fmt.Println(r) } |
2 Comments
在github上看到你的go的项目跑来的:P
The abiltiy to think like that shows you’re an expert