根据此Go Data Structures文章的介绍,在“字符串”部分下,它声明对字符串进行切片将使原始字符串保留在内存中。
“(顺便说一句,Java 和其他语言中有一个众所周知的问题,当您将字符串切片以保存一小部分时,对原始字符串的引用会将整个原始字符串保留在内存中,即使只有一小部分仍然存在Go也有这个陷阱。我们尝试并拒绝的替代方法是使字符串切片变得如此昂贵(分配和复制),以至于大多数程序都避免了。)”
因此,如果我们有一个很长的字符串:
s := "Some very long string..."
我们采取一小部分:
newS := s[5:9]
在s
我们也发布之前,不会发布原始文件newS
。考虑到这一点,如果我们需要保持newS
长期状态,但s
为了垃圾收集而释放,该采取什么适当的方法呢?
我想也许是这样的:
newS := string([]byte(s[5:9]))
但是我不确定这是否会切实可行,或者是否有更好的方法。
白猪掌柜的
芜湖不芜
相关分类