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

要么我必须像这样写一个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())


蝴蝶刀刀
浏览 91回答 1
1回答

千巷猫影

使用函数来避免复制/粘贴类似的代码: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))
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go