为了账号安全,请及时绑定邮箱和手机立即绑定

是否可以使用/写入bufio。作家?

是否可以使用/写入bufio。作家?

Go
蝴蝶刀刀 2022-08-01 10:56:15
要么我必须像这样写一个int16:delay :=  uint16(200)buf = new(bytes.Buffer)err = binary.Write(buf, encoding, delay)if err != nil {    panic(fmt.Sprint("binary.Write failed:", err))}_, _ = writer.Write(buf.Bytes())...或者和int64,像这样:nbObjects :=  uint64(len(myArray))buf = new(bytes.Buffer)err = binary.Write(buf, encoding, nbObjects)_, _ = writer.Write(buf.Bytes())..或类似的字符串:now := []byte(time.Now().Format("2006-01-02T15:04:05-0700"))buf = new(bytes.Buffer)err = binary.Write(buf, encoding, now)if err != nil {    panic(fmt.Sprint("binary.Write failed:", err))}_, _ = writer.Write(buf.Bytes())我可能有很多事情要做,但相同的“共享”代码总是:buf = new(bytes.Buffer)err = binary.Write(buf, encoding, [my variable])if err != nil {    panic(fmt.Sprint("binary.Write failed:", err))}_, _ = writer.Write(buf.Bytes())有没有办法“概括”这一点,从而拥有这样的“最终”代码:uint16(200).write(writer, encoding)uint64(len(myArray)).write(writer, encoding)[]byte(time.Now().Format("2006-01-02T15:04:05-0700")).write(writer, encoding)(也许这是不可能的,我只是想知道我是否必须在每次必须编写一些东西时复制/粘贴我的代码writer())
查看完整描述

1 回答

?
千巷猫影

TA贡献1829条经验 获得超7个赞

使用函数来避免复制/粘贴类似的代码:


func write(writer io.Writer, encoding binary.ByteOrder, value interface{}) {

    buf := new(bytes.Buffer)

    err := binary.Write(buf, encoding, value)

    if err != nil {

        panic(fmt.Sprint("binary.Write failed:", err))

    }

    _, _ = writer.Write(buf.Bytes())

}

这样称呼它:


write(writer, encoding, uint16(200))

因为字节。不需要缓冲区,写入功能可以简化为:


func write(writer io.Writer, encoding binary.ByteOrder, value interface{}) {

    err := binary.Write(writer, encoding, value)

    if err != nil {

        panic(fmt.Sprint("binary.Write failed:", err))

    }

}

此版本的函数更改了错误的处理方式。问题中的代码忽略从 返回的错误。当从编写器返回错误时,此版本将死机。写。writer.Write


如果要比惊慌失措更优雅地处理错误,请调用 binary。直接写入:


err := binary.Write(writer, encoding, value)

if err != nil {

    // handle error

}

在此代码段中,可以是 、 等。valueuint16(200)uint64(len(myArray))


查看完整回答
反对 回复 2022-08-01
  • 1 回答
  • 0 关注
  • 90 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信