slice 与 append 的坑
初始容量被超过了,它会新建一个slice,然后把旧的内容拷贝过去,然后append数据,这就会导致底层数组改变了,期望的结果可能就不是预期的了
1 2 3 4 5 6 7 8 9 10 11 12 13
| func Pingpong(s []int) { s = append(s, 3) } func main() { s := make([]int, 0) fmt.Println(s) Pingpong(s) fmt.Println(s) }
输出(两次打印的slice结果都是空): [] []
|
怎么解决这个问题?答案是增加返回值
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| func Pingpong(s []int) []int { s = append(s, 4) return s } func main() { s := make([]int, 0) fmt.Println(s) s = Pingpong(s) fmt.Println(s) }
输出: [] [4]
|
用t.Format(time.ANSIC或者t.Format(“Mon Jan _2 15:04:05 2006”这里不能调整,否则时间差异极大
1 2 3 4 5 6 7
| func main() { t := time.Now() fmt.Println(t) }
输出: 2022-07-02 18:28:18.1427377 +0800 CST m=+0.003047101
|
1 2 3 4 5 6 7 8
| func main() { t := time.Now() fmt.Println(t.Format(time.ANSIC)) }
输出: Sat Jul 2 18:29:34 2022
|
1 2 3 4 5 6 7
| func main() { t := time.Now() fmt.Println(t.Format("Mon Jan _2 15:04:05 2006")) }
输出: Sat Jul 2 18:31:59 2022
|
range 与闭包的坑
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| func main() { s := []string{"a", "b", "c"} for _, v := range s { go func() { fmt.Println(v) }() } time.Sleep(3 * time.Second) }
输出: c c c
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| func main() { s := []string{"a", "b", "c"} for _, v := range s { go func(v string) { fmt.Println(v) }(v) } time.Sleep(3 * time.Second) }
输出: c b a
|