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)) 进行指针操作,实现 bytestring 的零内存复制转换。
  • 至此,通过非常巧妙地方式解决了背景中的两个问题。大家也不用一直去重复写类似的代码了。

    总结

    一直以来,Go 中的 string 和 slice 因为底层数组指向和扩缩容机制等原因饱受争议,在末尾也给出一些公众号之前介绍过的一些 “坑”,有兴趣的读者可以看看。

    本次的 1.18 新方法更新,是有一定功能作用的,在学习上也能够明确的知道 Clone 他的作用和定义,会留个心眼。

    你的项目中有类似的代码吗?

    往期推荐

  • Go 切片导致内存泄露,被坑两次了!
  • Go 切片这道题,吵了一个下午!
  • 关注煎鱼,获取业内第一手消息和知识

    Go——高效字符串连接

    Go中可以使用“+”合并字符串,但是这种合并方式效率非常低,每合并一次,都是创建一个新的字符串,就必须遍历复制一次字符串。

    建议:

    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的主要内容,如果未能解决你的问题,请参考以下文章

    分享 2 个 Go1.18 新特性的官方教程

    Go1.18 新特性:新增好用的 Cut 方法

    Go1.18 新特性:编译后的二进制文件,将包含更多信息

    Go 1.18 新特性:多模块工作区模式

    Go官方 - 1.18 发布说明

    Prometheus 2.36.0 新特性