我代码里面有这么一段逻辑
func foo() int { ch := make(chan int) go func() { ch <- 1 }() go func() { ch <- 2 }() ret := <- ch return ret }这里问题出在make(chan int)时,默认buffer size是0,这样两个go协程在试图往ch里加东西时,如果没有消费者,其实会一直卡死等待。但是我只消费一个,所以会导致一定有一个协程没有退出,导致内存泄漏。
我是通过go tool pprof 把goroutine的占用情况找出来发现这个问题的: