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

Teo*_*kov 5 sockets io go

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

//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
}
Run Code Online (Sandbox Code Playgroud)

现在假设我不想使用如此低级的技术,并且想使用一个可以为我完成此操作的函数。我应该使用标准库中的哪个函数?

Cer*_*món 5

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

_, err := conn.Write(msg)
if err != nil{
    // handle error
}
Run Code Online (Sandbox Code Playgroud)

循环是不必要的,因为当 Write 在写入所有切片数据之前停止时,Write 会返回非零错误。

在这方面,写入与读取不同。读取无需填充切片即可成功。