type student struct {
name string
id int
}
students := []student{
{name: "a",id: 1},
{name: "b",id: 2},
}
m := make(map[interface{}]*student)
m1 := make(map[interface{}]*student)
for k,stu := range students{
m[stu.id] = &stu
m1[stu.id] = &students[k]
}
m的值都一样,m1则是我们需要的,还可以在for 内 添加 临时变量,原因是 stu 变量的地址是一样的
读写的地方一般都要加锁
defer fun(xx) defer 后面跟的是fun的时候 fun的参数 会在那一刻计算好,后面defer 执行时,会根据当时计算好的参数进行运算,defer 按堆指令先进后出的顺序执行。
注意匿名函数使用的是,传参的值,还是全局的值,传参的值是当时就固定的,全局的值可能会不是按顺序来的那种
func goParam(){
var wg sync.WaitGroup
wg.Add(20)
for i:=0;i<10;i++ {
go func() {
fmt.Println("=== ",i)
wg.Done()
}()
}
for i:=0;i<10;i++ {
go func(i int) {
fmt.Println("par ",i)
wg.Done()
}(i)
}
wg.Wait()
}
持续收集中。。。