【问题标题】:Golang writing to a socket without worrying about incomplete dataGolang 写入套接字而不用担心数据不完整
【发布时间】:2021-06-24 10:21:08
【问题描述】:

我们都知道,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
}

现在假设我不想使用这种低级技术并且想使用一个函数来为我做这件事。我应该使用标准库中的哪个函数?

【问题讨论】:

  • “我们都知道 Write 方法不能保证从缓冲区中写入高字节”,不,我们并不都知道,因为它不是真的。来自文档:Write must return a non-nil error if it returns n &lt; len(p)

标签: sockets go io


【解决方案1】:

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

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

没有必要循环,因为如果没有写入完整的缓冲区,Write 会返回错误。在这方面,Write 与 Read 不同。读取可以成功,无需填充缓冲区。

【讨论】:

    猜你喜欢
    • 2015-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-02
    相关资源
    最近更新 更多