gpt4 book ai didi

go - 是否可以使用bufio.Writer进行使用/写入?

转载 作者:行者123 更新时间:2023-12-03 10:10:40 24 4
gpt4 key购买 nike

我要么必须这样写一个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()写一些东西时都必须复制/粘贴我的代码)

最佳答案

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

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))
因为不需要bytes.Buffer,所以写函数可以简化为:
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返回的错误。从writer.Write返回错误时,此版本会出现紧急情况。
如果要比紧急情况更优雅地处理错误,请调用binary.Write直接:
err := binary.Write(writer, encoding, value)
if err != nil {
// handle error
}
在此代码段中, value可以是 uint16(200)uint64(len(myArray))等。

关于go - 是否可以使用bufio.Writer进行使用/写入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65543197/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com