登录
首页 >  Golang >  Go问答

将字符串转换为字节

来源:stackoverflow

时间:2024-04-18 13:30:33 208浏览 收藏

亲爱的编程学习爱好者,如果你点开了这篇文章,说明你对《将字符串转换为字节》很感兴趣。本篇文章就来给大家详细解析一下,主要介绍一下,希望所有认真读完的童鞋们,都有实质性的提高。

问题内容

我正在尝试将 2d 字符串切片转换为 1d 字节切片,但速度非常慢。还有更好的方法吗?

func TwoDstringsliceToOneByteSlice(csvRecords [][]string) []byte {
    var singleSlice []byte
    for _, record := range csvRecords {
    for _, item := range record {
        singleSlice = append(singleSlice, []byte(item)...)
    }
    }
    return singleSlice
}

正确答案


示例中的每个 append 首先复制其参数 - string[]byte 之间的类型转换(反之亦然)是 go 中为数不多的复制数据的地方之一, - 然后很可能复制目标切片,以便为要附加的内容创建更多空间。

一个明显的改进方法是这样的

func TwoDstringsliceToOneByteSlice(csvRecords [][]string) []byte {
  var buf bytes.Buffer
  for _, record := range csvRecords {
    for _, item := range record {
        buf.WriteString(item)
    }
  }
  return buf.Bytes()
}

请注意,如果您打算将结果用于“读取”(就像使用此类数据作为 http post 请求的有效负载的情况一样),您可以立即使用 bytes.buffer - 而无需获取字节从中切片 - 因为 bytes.buffer 实现 io.reader

第二个改进是首先计算所有字符串的总长度,然后预分配目标切片。
然后,您可以在写入之前在 bytes.buffer 上调用 .grow(),或者放弃 bytes.buffer 并使用子切片和 copy (但我现在建议不要这样做)。

…但是,正如 @jimb 正确指出的那样,除非我们知道如何衡量性能,否则很难明智地猜测。

今天关于《将字符串转换为字节》的内容介绍就到此结束,如果有什么疑问或者建议,可以在golang学习网公众号下多多回复交流;文中若有不正之处,也希望回复留言以告知!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>