Golang 写入套接字而不用担心数据不完整

Golang writing to a socket without worrying about incomplete data

我们都知道,Write 方法并不能保证将缓冲区中的字节写入高。因此,使用原始 Write 方法将字节写入 asocket 的规范方式如下

//how many bytes we have written
written := 0 

for written < len(msg){
    //write the bytes from buffer that havent been witten yet
    wr, err := conn.Write(msg[written:])

    if err != nil{
        return;
    }

    written += wr
}

现在假设我不想使用这种低级技术,而是想使用一个可以为我执行此操作的函数。我应该使用标准库中的哪个函数?

将字节写入套接字的规范方法是:

_, err := conn.Write(msg)
if err != nil{
    // handle error
}

无需循环,因为如果未写入完整缓冲区,则会写入 returns 错误。写在这方面不同于读。无需填充缓冲区即可读取成功。