20210615关于net.Conn的析构问题,是先应关闭conn还是先关闭数据源管道 - ziyouzy/2021blog GitHub Wiki

你需要可以把conn也当作一个管道,现在拿一个管道的基本使用套路举例:

rawch :=make(chan []byte)
go func(){
    newch := make(chan []byte)
    defer close(newch)
    for baits := range rawch{
        newch <- baits
    } 
}()
time.Sleep(30*time.Second)
close(rawch)

客观来说,newch其实就是net.Conn
而rawch则是“外层”管道
因此你现在就知道该怎么做了

其实之所以之前我一直想不明白是因为问题太多了,各种问题掺杂在一起,思路上没有把这些问题进行“解耦合”

但是现在我已经想明白了这些问题:

1.write与read的先后关系
2.write的本质只是一个管道罢了
3.具备了数据流动的解耦思路(conn2dates;sends2conn)
4.套接字项目析构的4大基础事件
5.等等

于是乎现在的我更加的有能力清晰的思考问题了