初始容量被超過了,它會新建一個slice,而後把舊的內容拷貝過去,而後append數據,這就會致使底層數組改變了,指望的結果可能就不是預期的了數組
package main import("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 main import("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]
package main import( "fmt" "time" ) func main(){ t := time.Now() fmt.Println(t) } 2018-07-09 11:51:25.906284 +0800 CST m=+0.000278103 若是不想要時區等信息,用format package main import( "fmt" "time" ) func main(){ t := time.Now() fmt.Println(t.Format(time.ANSIC)) } Mon Jul 9 11:54:15 2018 https://gowalker.org/time#_constants package main import( "fmt" "time" ) func main(){ t := time.Now() fmt.Println(t.Format("Mon Jan _2 15:04:05 2006")) //這裏是標準的對比時間,不能改變嗎,不然差別很大 } Mon Jul 9 11:58:18 2018 https://gowalker.org/time#_constants package main import( "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
package main import( "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 } } c c c fatal error: all goroutines are asleep - deadlock! package main import( "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,並不全是c b a