package main;
import (
"fmt"
"time"
"sync"
)
//修改slice的坑
func add(s []int) {
//当s通过append添加元素时,这里会发生内存重新分配
//s会指向新的地址
s = append(s,3);
}
//当需要对slice进行修改时,建议通过函数返回值把该slice返回
func add2(s []int) []int {
s = append(s,3);
return s;
}
func main() {
//下面的二次打印结果都是[]
s := make([]int,0);
fmt.Println(s);
add(s);
fmt.Println(s);
//add2()返回的slice才是真正的修改后的slice
s = add2(s);
fmt.Println(s);
//时间的格式化输出的坑
t := time.Now();
fmt.Println(t.Format(time.ANSIC));
//注意下面的字符串不能写错,写错了输出时间会不对
fmt.Println(t.Format("2006-01-02 15:04:05"));
//for range中闭包的坑
a := []string{"a","b","c"};
swg := sync.WaitGroup{};
swg.Add(3);
for _,v := range a {
go func() {
//注意,这里的闭包,v是引用的
//运行三次后,实际v指向的是slice最后一个元素
fmt.Println(v);
swg.Done();
}();
}
swg.Wait();
swg.Add(3);
for _,v := range a {
//修改成如下形式,以参数的形式传递进去
go func(s string) {
fmt.Println(s);
swg.Done();
}(v);
}
swg.Wait();
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。