項目與坑
slice容量問題
初始容量被超過了,它會建立一個slice,然後把舊的內容拷貝過去,然後append資料,這就會導致底層數組改變了,期望的結果可能就不是預期的了
package mainimport("fmt")func Pingpong(s []int) { s = append(s,3)//原來的容量為0,append之後,重新分配了記憶體位址,s跟原來的slice s已經不是同一個了}func main(){ s := make([]int,0) //初始化slice s,初始容量為0,長度為0 fmt.Println(s) Pingpong(s) fmt.Println(s)}兩次列印的slice結果都是空[][]怎麼解決這個問題,真的修改修改slice?增加傳回值package mainimport("fmt")func Pingpong(s []int ) []int { //希望修改slice的,設定傳回值,通過傳回值去返回資料 s = append(s,4)//原來的容量為0,append之後,重新分配了記憶體位址,s跟原來的slice s已經不是同一個了 return s }func main(){ s := make([]int, 0) //初始化slice s,初始容量為0,長度為0 fmt.Println(s) s = Pingpong(s) //這裡取出傳回值 fmt.Println(s)}[][4]
time,用t.Format(time.ANSIC或者t.Format("Mon Jan _2 15:04:05 2006"這裡不能調整,否則時間差異極大
package mainimport( "fmt" "time")func main(){ t := time.Now() fmt.Println(t)}2018-07-09 11:51:25.906284 +0800 CST m=+0.000278103如果不想要時區等資訊,用formatpackage mainimport("fmt""time")func main(){ t := time.Now() fmt.Println(t.Format(time.ANSIC))}Mon Jul 9 11:54:15 2018https://gowalker.org/time#_constantspackage mainimport("fmt""time")func main(){ t := time.Now() fmt.Println(t.Format("Mon Jan _2 15:04:05 2006")) //這裡是標準的對比時間,不能改變嗎,否則差異很大}Mon Jul 9 11:58:18 2018https://gowalker.org/time#_constantspackage mainimport("fmt""time")func main(){ t := time.Now() fmt.Println(t.Format("Mon Jan _2 15:04:05 2006"))}Mon Jul 9 11:59:48 2018
range、for range與閉包的坑
package mainimport("fmt")func main(){ s := []string{"a","b","c"} for _,v := range s{ go func() { //通過for range啟動doroutine,不用參數穿進去的值都是引用閉包的思想 fmt.Println(v)//這裡都是引用了v的地址,v全等於c }() } select { //為了防止main退出,寫死slect }}cccfatal error: all goroutines are asleep - deadlock!package mainimport("fmt")func main(){ s := []string{"a","b","c"} for _,v := range s{ go func(v string) { //通過for range啟動doroutine,不用參數穿進去的值都是引用閉包的思想 fmt.Println(v)//這裡都是引用了v的地址,v全等於c }(v) } select { //為了防止main退出,寫死slect }}c //這裡輸出a和b,並不全是cba