doudou2121 2016-03-13 20:32 采纳率: 50%
浏览 5351
已采纳

我应该如何在Golang中将切片转换为字符串?

我正在分裂一个字符串。

我希望我的程序保留数组的一个元素并释放底层数组。

不幸的是,我不知道如何将字符串的一个片段转换为不引用底层字符串的字符串。

我是不是应该这样做:

func unslice(s string) (string) {
  return string([]byte(s))
}

背景是:

  1. 底层的字符串非常大
  2. 我想保留的部分很小
  3. 我想保留的部分会保留很长时间
  4. 这个程序会运行很长一段时间,甚至更长时间
  5. 在程序的生命周期中,它将分割这些字符串中的许多(数百万)

下面是一个回应评论的例子:

func takesBigStringOften(big string) {
    parts := strings.Split(big, " ")

    saveTinyStringForALongTime(parts[0])
}
  • 写回答

2条回答 默认 最新

  • duanfu7004 2016-03-13 20:50
    关注

    To ensure that Go doesn't keep the underlying string in memory you will have to explicitly copy it to a new location:

    func unslice(old string) string {
        new := make([]byte,len(old))
        copy(new,old)
        return string(old)
    }
    
    SmallString := unslice(BigString[0:7])
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 metadata提取的PDF元数据,如何转换为一个Excel
  • ¥15 关于arduino编程toCharArray()函数的使用
  • ¥100 vc++混合CEF采用CLR方式编译报错
  • ¥15 coze 的插件输入飞书多维表格 app_token 后一直显示错误,如何解决?
  • ¥15 vite+vue3+plyr播放本地public文件夹下视频无法加载
  • ¥15 c#逐行读取txt文本,但是每一行里面数据之间空格数量不同
  • ¥50 如何openEuler 22.03上安装配置drbd
  • ¥20 ING91680C BLE5.3 芯片怎么实现串口收发数据
  • ¥15 无线连接树莓派,无法执行update,如何解决?(相关搜索:软件下载)
  • ¥15 Windows11, backspace, enter, space键失灵