go mistakes

PEAR2020發表於2024-06-22

1. map一定要初始化,slice可以不用初始化
2. pointer一定要初始化
var c *Course => must init => c = &Course{} or new(Course)
3. for-loop的臨時變數是一個值會變化的變數

var out []*int
for i:= 0; i<3; i++{
// 儲存的是i的地址,但是i最後會變成3,slice裡全部是3
    out = append(out,&i)
}

=> tmp := i
out = append(out,&tmp)
// 1. use tmp

for _,id := range goodsId{
    tmp := id
    go func(){
    輸出tmp
    }()
}        


// 2. use pass by value

go func(id uint64){
    print id
}(id)

4. generics

func Add[T int|int32|float32|float64|uint64](a,b T) T{
    return a+b
}

Add[int](1,2)

substitution:interface{}

func IAdd(a,b interface{}) interface{}{
    switch a.(type){
    case int:
        return a.(int) + b.(int)
    case int32:
    return ...
    }
   return nil
}

IAdd(1,2).(int)    

相關文章