20210304装有未读取数据的net.Conn,存在未消费数据的管道,发生临界事件的timer.C三者其实是同一个东西,也不用把对他们的销毁想的过于复杂 - ziyouzy/2021blog GitHub Wiki
先说结论,无论“里面是否有数据”,只要没有<-,只要循环都已经退出,只要第三方的组件已经执行stop或其他的析构函数,那么他们就是一个普普通通的数据罢了
更形象的比喻一下,就和mbtable一样,虽然内容特多,但是并不耽误析构的方式
ps:timer的析构重点不是在于临界后的排空数据逻辑,而是在于执行timer.Stop()方法本身,这就像是net.Conn必须执行Close(),ioopen某个文件必须Close()一样
这和对管道的close(Chs)操作是完全不同的两件事,析构时对管道的close(并不是必须的)
close一个管道的意义其实主要还是在于自动跳出for range这个管道的死循环结构,从而触发隐式析构链之类的后续工作
不close的话只要没有地方对他进行着<-的相关操作,就等同于析构一个普通数据类型一样
析构时close一个每必要close的管道,其实就是一种强迫症,但是人畜无害