目录:
[显示]
关于NaN
NaN代表不是数字
任意两个 NaN 都不相等
select中额外表达式的执行规则
对于 select 语句,在进入该语句时,会按源码的顺序对每一个case子句进行求值:这个求值只针对发送或接收操作的额外表达式
如 foo <- <-bar 会先对 <-bar 进行求值
select {
case ch <- <-input1:
case ch <- <-input2:
}
每一次都会执行<-input1和<-input2,执行完后再选择一个case接着执行,这也意味着会随机丢一半的数据
case <- time.After(30 * time.Second): 有内存泄露 应使用 time.NewTimer 替代
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
package main import ( "fmt" ) func main() { ch := make(chan int) go func() { select { case ch <- getVal(1): fmt.Println("in first case") case ch <- getVal(2): fmt.Println("in second case") default: fmt.Println("default") } }() fmt.Println("The val:", <-ch) } func getVal(i int) int { fmt.Println("getVal, i=", i) return i } |
指针 指针
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
package main import ( "fmt" "sync" ) func main() { wg := sync.WaitGroup{} wg.Add(1) go hello(&wg) // 注意要传指针 wg.Wait() } func hello(wg *sync.WaitGroup) { // 注意参数类型必须是指针 如果传入的是副本 则不起作用 fmt.Println("hello") wg.Done() } |
转载请注明:轻风博客 » golang中容易掉的坑