Golang中TCPConn.Write直接调用还是放入for循环执行更正确?
问题解答
结论
sendData_Method2 是正确实现,不需要手动编写for循环调用Write方法。
核心依据
Go语言io.Writer接口有明确的官方约定:
如果Write方法返回的已写入字节数
n小于待写入切片的长度,必须同时返回非nil的错误,绝对不允许出现部分写入且无错误返回的情况。
*net.TCPConn 作为标准库提供的io.Writer实现,完全遵守该约定:默认阻塞模式下的Write调用,要么在所有数据全部写入完成后才返回,要么在写入中途遇到错误时立即返回已写入的字节数和对应错误,不存在写了部分数据却没有错误返回的场景,因此不需要你自己处理分段写入的逻辑。
关于sendData_Method1的说明
你编写的Method1不仅逻辑多余,还存在代码bug:startPosi = n 这行逻辑错误,正确写法应该是startPosi += n,哪怕修正了这个问题,在默认的TCP阻塞模式下,这段循环逻辑也永远不会触发多次写入的分支,属于完全没必要的冗余实现。
内容的提问来源于stack exchange,提问作者Alex.Wong
相关产品推荐
相关产品推荐

