Go1.18 新特性:高效复制,strings, bytes 标准库新增 Clone API
Posted 脑子进煎鱼了
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Go1.18 新特性:高效复制,strings, bytes 标准库新增 Clone API相关的知识,希望对你有一定的参考价值。
大家好,我是煎鱼。
Go1.18 过几周(3月份)就要发布了,先前我们已经更新了好几期新版本特性,今天给大家带来一个新的优化类的内容,是与 strings 和 bytes 标准库有关。
是经常需要复制的。需要写以下代码:函数对原始字符串进行复制,得到一份新的 []byte
数据。
*(*string)(unsafe.Pointer(&b))
进行指针操作,实现 byte
到 string
的零内存复制转换。至此,通过非常巧妙地方式解决了背景中的两个问题。大家也不用一直去重复写类似的代码了。
总结一直以来,Go 中的 string 和 slice 因为底层数组指向和扩缩容机制等原因饱受争议,在末尾也给出一些公众号之前介绍过的一些 “坑”,有兴趣的读者可以看看。
本次的 1.18 新方法更新,是有一定功能作用的,在学习上也能够明确的知道 Clone 他的作用和定义,会留个心眼。
你的项目中有类似的代码吗?
往期推荐
关注煎鱼,获取业内第一手消息和知识 Go——高效字符串连接
Go中可以使用“+”合并字符串,但是这种合并方式效率非常低,每合并一次,都是创建一个新的字符串,就必须遍历复制一次字符串。
建议:
- 1.10 之前版本使用 bytes.Buffer
- 1.10+ 以后版本使用 strings.Builder(Go1.10以后出现的)
package main
import (
"fmt"
"strings"
)
func main() {
ss := []string{
"sh",
"hn",
"test",
}
var b strings.Builder
for _, s := range ss {
fmt.Fprint(&b, s)
}
print(b.String())
}
以上是关于Go1.18 新特性:高效复制,strings, bytes 标准库新增 Clone API的主要内容,如果未能解决你的问题,请参考以下文章