【发布时间】:2014-05-30 14:24:47
【问题描述】:
如何编写一个通用的 Go 函数来将字节推入字节数组?
我认为附加到切片并不是一个完美的选择,因为数组不应该增长。 但是,该函数应处理任何数组大小。 我正在考虑对数组进行切片以使函数接受任何数组大小。 请参阅下面的草图。
有没有更清洁的方法?
播放:http://play.golang.org/p/Gii9-JM33E
func push(buf []byte, size int, b byte) (int, error) {
max := len(buf)
if max < 1 {
return size, fmt.Errorf("buffer underflow: max=%d char=%d", max, b)
}
if size >= max {
return size, fmt.Errorf("buffer overflow: size=%d max=%d char=%d", size, max, b)
}
buf[size] = b
return size + 1, nil
}
用法:
buf := [3]byte{}
size := 0
var err error
size, err = push(buf[:], size, 'a')
【问题讨论】:
-
你当前的函数有什么问题?
-
@OneOfOne 它需要对数组进行切片才能接受任何数组大小。我觉得传递一个切片加上它的底层数组大小很笨拙......我希望有一个更干净的惯用方式。
-
@JimB 数组加上它的大小出现在我在函数下方添加的使用模式中。
-
好的,我明白了。但是你为什么首先使用数组?
-
我感觉你在这里关注的是错误的事情。你想解决什么问题?