错误的Channel使用
代码:
问题:
解决:
参考网址: https://segmentfault.com/q/1010000007528186
死锁了,看上去没什么问题啊!--新手的一个坑!
其实是对 channel 的理解与使用有误区!
defer 调用可能会“篡改”输出结果,参考如下:
func main() {
v := testDefer001(1, 2)
fmt.Printf("%v\n", v)
// out:
// 999
}
func testDefer001(x int, y int) (z int) {
/*返回的是命名参数,在 defer 中可以直接访问并“篡改”*/
defer func() {
z = 999
}()
/*虽然这里计算的结果是3,但在defer中被“篡改”了,使用时要注意*/
z = x + y
return
}
defer 定义形式