diff --git "a/content/channel/8-\345\246\202\344\275\225\344\274\230\351\233\205\345\234\260\345\205\263\351\227\255 channel.md" "b/content/channel/8-\345\246\202\344\275\225\344\274\230\351\233\205\345\234\260\345\205\263\351\227\255 channel.md" index 49d7513..da4046e 100644 --- "a/content/channel/8-\345\246\202\344\275\225\344\274\230\351\233\205\345\234\260\345\205\263\351\227\255 channel.md" +++ "b/content/channel/8-\345\246\202\344\275\225\344\274\230\351\233\205\345\234\260\345\205\263\351\227\255 channel.md" @@ -33,7 +33,7 @@ func main() { 看一下代码,其实存在很多问题。首先,IsClosed 函数是一个有副作用的函数。每调用一次,都会读出 channel 里的一个元素,改变了 channel 的状态。这不是一个好的函数,干活就干活,还顺手牵羊! -其次,IsClosed 函数返回的结果仅代表调用那个瞬间,并不能保证调用之后会不会有其他 goroutine 对它进行了一些操作,改变了它的这种状态。例如,IsClosed 函数返回 true,但这时有另一个 goroutine 关闭了 channel,而你还拿着这个过时的 “channel 未关闭”的信息,向其发送数据,就会导致 panic 的发生。当然,一个 channel 不会被重复关闭两次,如果 IsClosed 函数返回的结果是 true,说明 channel 是真的关闭了。 +其次,IsClosed 函数返回的结果仅代表调用那个瞬间,并不能保证调用之后会不会有其他 goroutine 对它进行了一些操作,改变了它的这种状态。例如,IsClosed 函数返回 false,但这时有另一个 goroutine 关闭了 channel,而你还拿着这个过时的 “channel 未关闭”的信息,向其发送数据,就会导致 panic 的发生。当然,一个 channel 不会被重复关闭两次,如果 IsClosed 函数返回的结果是 true,说明 channel 是真的关闭了。 有一条广泛流传的关闭 channel 的原则: