初始容量被超过了,它会新建一个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