相关疑难解决方法(0)

切片后释放字符串以进行垃圾收集的正确方法

根据这篇Go Data Structures文章,在Strings部分下,它指出采用一个字符串片段会将原始字符串保留在内存中.

"(另外,在Java和其他语言中有一个众所周知的问题,当你切割一个字符串来保存一小块时,对原始文件的引用会将整个原始字符串保留在内存中,即使只有少量仍然存在Go也有这个问题.我们尝试和拒绝的替代方案是使字符串切片如此昂贵 - 分配和副本 - 大多数程序都避免使用它.)"

所以如果我们有一个很长的字符串:

s := "Some very long string..."
Run Code Online (Sandbox Code Playgroud)

我们采取一小部分:

newS := s[5:9]
Run Code Online (Sandbox Code Playgroud)

s我们发布之前,原件不会发布newS.考虑到这一点,如果我们需要newS长期保留,但是s为垃圾收集发布,采取什么方法?

我想也许这个:

newS := string([]byte(s[5:9]))
Run Code Online (Sandbox Code Playgroud)

但我不确定这是否真的有用,或者是否有更好的方法.

string garbage-collection go slice

4
推荐指数
1
解决办法
488
查看次数

golang:[] byte(string)vs [] byte(*string)

我很好奇为什么Golang没有提供[]byte(*string)方法.从性能的角度来看,不会[]byte(string)复制输入参数并增加更多的成本(虽然这看起来很奇怪,因为字符串是不可变的,为什么要复制它们)?

我是Go的新手,非常感谢任何澄清.

string type-conversion go slice

2
推荐指数
2
解决办法
1496
查看次数

标签 统计

go ×2

slice ×2

string ×2

garbage-collection ×1

type-conversion ×1