日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
Go1.18新特性:新增好用的Cut方法

在各種寫業(yè)務(wù)代碼的時(shí)候,大家會(huì)常常要處理字符串的內(nèi)容。常見的像是用郵箱登陸賬號(hào),如果是:eddycjy@gmail.com,那就得根據(jù) @ 來切割,分別取出前和后,來識(shí)別用戶名和郵箱地址。

專注于為中小企業(yè)提供成都做網(wǎng)站、網(wǎng)站建設(shè)服務(wù),電腦端+手機(jī)端+微信端的三站合一,更高效的管理,為中小企業(yè)璧山免費(fèi)做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動(dòng)了成百上千家企業(yè)的穩(wěn)健成長,幫助中小企業(yè)通過網(wǎng)站建設(shè)實(shí)現(xiàn)規(guī)模擴(kuò)充和轉(zhuǎn)變。

這種需求,在 Go 里寫起來方便嗎?今天就由煎魚帶大家了解。

背景

重復(fù)代碼

無獨(dú)有偶,Ainar Garipov 在許多項(xiàng)目中遇到了前面我們所提的切割需求。

例如:

idx = strings.Index(username, "@")
if idx != -1 {
name = username[:idx]
} else {
name = username
}

又或是:

idx = strings.LastIndex(address, "@")
if idx != -1 {
host = address[idx+1:]
} else {
host = address
}

經(jīng)常要反復(fù)寫一些繁瑣的代碼,提案提出者表示不愉快。

新提案

實(shí)施內(nèi)容

建議新增 Cut 方法到 strings 標(biāo)準(zhǔn)庫:

func Cut(s, sep string) (before, after string, found bool) {
if i := Index(s, sep); i >= 0 {
return s[:i], s[i+len(sep):], true
}
return s, "", false
}

同步也要在 bytes 標(biāo)準(zhǔn)庫:

func Cut(s, sep []byte) (before, after []byte, found bool)

這樣一來,就可以從原本的:

 eq := strings.IndexByte(rec, '=')
if eq == -1 {
return "", "", s, ErrHeader
}
k, v = rec[:eq], rec[eq+1:]

變成:

 k, v, ok = strings.Cut(rec, "=")
if !ok {
return "", "", s, ErrHeader
}

寫法上會(huì)更優(yōu)雅,在復(fù)雜的場(chǎng)景下會(huì)更具可讀性和抽象級(jí)別。

接受原因

可能就有小伙伴會(huì)吐槽了,Go 居然只為了節(jié)省 1 行代碼,就搞了個(gè)新函數(shù),這還是大道至簡(jiǎn)嗎?

實(shí)際上,在官方團(tuán)隊(duì)(Russ Cox)介入后,他對(duì) Go 主倉庫進(jìn)行了分析,搜索了相關(guān)類似函數(shù)的使用:

  • strings.Index。
  • strings.IndexByte。
  • strings.IndexRune。

統(tǒng)計(jì)后,轉(zhuǎn)換為了可以使用 strings.Cut 的用法,在例子和測(cè)試數(shù)據(jù)之外有 311 個(gè)索引調(diào)用。

排除了一些確實(shí)不需要的,剩下 285 個(gè)調(diào)用。在這些調(diào)用中,有 221 次是最好寫成 Cut 方法的,能更優(yōu)雅。

也就是說,有現(xiàn)有的 Go 代碼中,有 77% 可以用新增的 Cut 函數(shù)寫得更清楚,可讀性和抽象可以做得更好。

Go 主倉庫確實(shí)存在如此重復(fù)的代碼,他認(rèn)為這也是非常不可思議的!

總結(jié)

Go1.18 的新特性中,Cut 雖然只是新增了一個(gè)方法,看上去無傷大雅。

但類似 Cut 方法的用法,在 Go 的主版本中其實(shí)已經(jīng)被發(fā)明了兩次。

該新方法的出現(xiàn),可以同時(shí)取代并簡(jiǎn)化四個(gè)不同的標(biāo)準(zhǔn)庫函數(shù):Index、IndexByte、IndexRune 和 SplitN 中的絕大部分用法。

由于這些原因,最終將 Cut 添加到標(biāo)準(zhǔn)庫中。

你覺得怎么樣?:)

參考

bytes, strings: add Cut


網(wǎng)站名稱:Go1.18新特性:新增好用的Cut方法
文章地址:http://m.5511xx.com/article/dhjsdsc.html