golang本身是不应该由消费者关闭channel的,所以你push到channel的协程,应该自己负责关闭channel。如果有多个push协程,则应该统一waitgroup然后来关闭
在发送端并没有api直接获取channel是否关闭
可以通过上面这个例子,reflect反射channel结构体里的对象来做,但不知道上面这个方法反射的时候万一碰到gc带来的内存漂移,这个方法还是不是安全,我是不太喜欢在这个地方直接做指针运算的,因为不原子
还一个办法是任其panic,使用recover来包装,发现了问题就把panic转换成err。如果需要,可以给自己的channel提供一个safepush的方法