当前位置: 首页 > 后端技术 > Java

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

时间:2023-04-02 10:31:44 Java

大家好,我是炸鱼。在写各种业务代码的时候,经常要和字符串的内容打交道。一种常见的方法是使用电子邮件登录帐户。如果是:eddycjy@gmail.com,那么就得按照@来截,正反面分别取出来标识用户名和邮箱。这个需求用Go写方便吗?今天炸鱼就带你了解一下。后台重复代码巧合的是,AinarGaripov在很多项目中都遇到了我们前面提到的裁剪需求。例如:idx=strings.Index(username,"@")ifidx!=-1{name=username[:idx]}else{name=username}或者:idx=strings.LastIndex(address,"@")ifidx!=-1{host=address[idx+1:]}else{host=address}经常需要重复写一些繁琐的代码,提议者对此表示不满。新提案实现内容建议在字符串标准库中加入Cut方法:funcCut(s,sepstring)(before,afterstring,foundbool){ifi:=Index(s,sep);i>=0{returns[:i],s[i+len(sep):],true}returns,"",false}同步也应该是字节标准库:funcCut(s,sep[]byte)(before,after[]byte,foundbool)这样就可以从原来的开始:eq:=strings.IndexByte(rec,'=')ifeq==-1{return"","",s,ErrHeader}k,v=rec[:eq],rec[eq+1:]变成:k,v,ok=strings.Cut(rec,"=")if!ok{return"","",s,ErrHeader}这种写法在复杂场景下会更优雅,更具可读性和抽象层次。如果接受这个理由,可能会有朋友吐槽。Go实际上创建了一个新函数只是为了节省一行代码。这仍然是简化的最佳方法吗?事实上,在官方团队(RussCox)介入之后,他对主要的Go存储库进行了分析,寻找相关类似函数的用法:strings.Index。字符串。索引字节。字符串。索引符文。统计后,转换为可以使用strings.Cut的用法,示例和测试数据外有311个索引调用。剔除一些确实不需要的,留下285个调用。在这些调用中,221最好写成Cut方法,这样会更优雅。也就是说,77%的现有Go代码可以用新的Cut函数写得更清晰,可读性和抽象性也可以做得更好。他认为Go主存储库中存在如此重复的代码真是不可思议!总结一下Go1.18的新特性,Cut虽然只是一种新的方法,但似乎无伤大雅。但是像Cut方法这样的用法实际上在Go的主要版本中被发明了两次。这种新方法的出现可以同时替代和简化四个不同标准库函数中的大部分用法:Index、IndexByte、IndexRune和SplitN。由于这些原因,Cut最终被添加到标准库中。你怎么认为?:)如有任何问题,欢迎在评论区反馈交流。最好的关系是相互成就。您的好评是创作炸鱼最大的动力。感谢您的支持。文章持续更新中。可以微信搜索【脑补炸鱼】阅读。本文已收录在GitHubgithub.com/eddycjy/blog中。学习Go语言可以看Go学习地图和路线。欢迎星星提醒。参考字节、字符串:addCut