英文:
How do I convert [][]byte to []byte?
问题
我有一个函数,它将数据分割并返回子切片的切片:
func split(buf []byte, lim int) [][]byte
显然,如果我这样做:
n, err = out.Write(split(buf[:n], 100))
我会得到一个错误:
无法将
split(buf[:n], 100)
(类型为[][]byte
)转换为类型[]byte
如何将[][]byte
转换为[]byte
?
基于@Wishwa Perera的编辑:https://play.golang.org/p/nApPAYRV4ZW
英文:
I have a function which splits data and returns slice of subslices:
(buf []byte, lim int) [][]byte
Obviously I get an error if I do:
n, err = out.Write(split(buf[:n], 100))
The error:
> cannot convert split(buf[:n], 100) (type [][]byte) to type []byte
How do I convert [][]byte
to []byte
?
Edit based on @Wishwa Perera: https://play.golang.org/p/nApPAYRV4ZW
答案1
得分: 1
由于您将buf
拆分为chunks
,您可以通过循环遍历split
的结果,将它们逐个传递给Write
。
for _, chunk := range split(buf[:n], 100) {
if _, err := out.Write(chunk); err != nil {
panic(err)
}
}
英文:
Since you are splitting buf
into chunks
, you can pass them individually to Write
by looping over the result of split
.
for _, chunk := range split(buf[:n], 100) {
if _, err := out.Write(chunk); err != nil {
panic(err)
}
}
答案2
得分: 1
如果out
是一个net.Conn
,就像你在另一个问题中提到的那样,那么可以使用net.Buffers来写入[][]byte
。
b := net.Buffers(split(buf[:n], 100))
_, err := b.WriteTo(out)
if err != nil {
panic(err)
}
英文:
If out
is a net.Conn
as in your other question, then use net.Buffers to write the [][]byte
.
b := net.Buffers(split(buf[:n], 100))
_, err := b.WriteTo(out)
if err != nil {
panic(err)
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论