如何将[][]byte转换为[]byte?

huangapple go评论121阅读模式
英文:

How do I convert [][]byte to []byte?

问题

我有一个函数,它将数据分割并返回子切片的切片:

  1. func split(buf []byte, lim int) [][]byte

显然,如果我这样做:

  1. 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:

  1. (buf []byte, lim int) [][]byte

Obviously I get an error if I do:

  1. 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

  1. for _, chunk := range split(buf[:n], 100) {
  2. if _, err := out.Write(chunk); err != nil {
  3. panic(err)
  4. }
  5. }
英文:

Since you are splitting buf into chunks, you can pass them individually to Write by looping over the result of split.

  1. for _, chunk := range split(buf[:n], 100) {
  2. if _, err := out.Write(chunk); err != nil {
  3. panic(err)
  4. }
  5. }

答案2

得分: 1

如果out是一个net.Conn,就像你在另一个问题中提到的那样,那么可以使用net.Buffers来写入[][]byte

  1. b := net.Buffers(split(buf[:n], 100))
  2. _, err := b.WriteTo(out)
  3. if err != nil {
  4. panic(err)
  5. }
英文:

If out is a net.Conn as in your other question, then use net.Buffers to write the [][]byte.

  1. b := net.Buffers(split(buf[:n], 100))
  2. _, err := b.WriteTo(out)
  3. if err != nil {
  4. panic(err)
  5. }

huangapple
  • 本文由 发表于 2021年7月27日 16:21:15
  • 转载请务必保留本文链接:https://go.coder-hub.com/68541302.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定