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

Posted 脑子进煎鱼了

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Go1.18 新特性:新增好用的 Cut 方法相关的知识,希望对你有一定的参考价值。

大家好,我是煎鱼。

在各种写业务代码的时候,大家会常常要处理字符串的内容。常见的像是用邮箱登陆账号,如果是:eddycjy@gmail.com,那就得根据 @ 来切割,分别取出前和后,来识别用户名和邮箱地址。

这种需求,在 Go 里写起来方便吗?今天就由煎鱼带大家了解。

的用法,在例子和测试数据之外有 311 个索引调用。

排除了一些确实不需要的,剩下 285 个调用。在这些调用中,有 221 次是最好写成 Cut 方法的,能更优雅。

也就是说,有现有的 Go 代码中,有 77% 可以用新增的 Cut 函数写得更清楚,可读性和抽象可以做得更好。

Go 主仓库确实存在如此重复的代码,他认为这也是非常不可思议的!

总结

Go1.18 的新特性中,Cut 虽然只是新增了一个方法,看上去无伤大雅。

但类似 Cut 方法的用法,在 Go 的主版本中其实已经被发明了两次。

该新方法的出现,可以同时取代并简化四个不同的标准库函数:Index、IndexByte、IndexRune 和 SplitN 中的绝大部分用法。

由于这些原因,最终将 Cut 添加到标准库中。

你觉得怎么样?:)

参考
  • bytes, strings: add Cut
  • 关注煎鱼,获取业内第一手消息和知识

    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 切片这道题,吵了一个下午!
  • 关注煎鱼,获取业内第一手消息和知识

    以上是关于Go1.18 新特性:新增好用的 Cut 方法的主要内容,如果未能解决你的问题,请参考以下文章

    Prometheus 2.36.0 新特性

    Go1.18 新特性:弃用 strings.Title 方法,换个新坑吧!

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

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

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

    Go官方 - 1.18 发布说明

    (c)2006-2024 SYSTEM All Rights Reserved IT常识