Go1.18 快訊:廢棄了這個 API
閱讀本文大概需要 5 分鐘。
大家好,我是 polarisxu。
從 11 月 01 日起,Go1.18 就凍結(jié)了,也就是 1.18 的功能已經(jīng)確定。

今天介紹一個 Go1.18 廢棄的 API,同時介紹響應的替代 API。
01 strings.Title 被廢棄
查看 go tip 標準庫文檔,發(fā)現(xiàn) strings.Title 被標識為 deprecated:https://pkg.go.dev/strings@master,而且該 API 的文檔默認被折疊了。

pkg.go.dev 針對廢棄的 API 使用了不一樣的樣式。
該 API 是干什么的?為什么會被標識為廢棄?
看一個例子就知道 strings.Title 的作用了:
package?main
import?(
?"fmt"
?"strings"
)
func?main()?{
?fmt.Println(strings.Title("her?royal?highness"))
?fmt.Println(strings.Title("loud?noises"))
?fmt.Println(strings.Title("хлеб"))
}
輸出:
Her?Royal?Highness
Loud?Noises
Хлеб
可見,strings.Title 會將每個單詞的首字母變成大寫字母。
strings?中還有一個函數(shù):ToTitle,它的作用和?ToUpper?類似,所有字符全部變成大寫,而不只是首字母。不過?ToTitle?和?ToUpper?的區(qū)別特別微小,Stackoverflow?上有相關討論,它們的區(qū)別是?Unicode?規(guī)定的區(qū)別。
那 strings.Title 為什么廢棄呢?strings.Title 的規(guī)則是使用單詞邊界,不能正確處理 Unicode 標點。
比如下面的代碼:
fmt.Println(strings.Title("here?comes?o'brian"))
期望輸出:Here Comes O'brian,但 strings.Title 的結(jié)果是:Here Comes O'Brian。
02 golang.org/x/text/cases 包
在 strings.Title 中提到,可以使用 golang.org/x/text/cases 代替 strings.Title,具體來說就是 cases.Title。
該包提供了通用和特定于語言的 case map,其中有一個 Title 函數(shù),簽名如下:
func?Title(t?language.Tag,?opts?...Option)?Caser
第一個參數(shù)是 language.Tag 類型,表示 BCP 47 種語言標記。它用于指定特定語言或區(qū)域設置的實例。所有語言標記值都保證格式良好。
第二個參數(shù)是不定參數(shù),類型是 Option,這是一個函數(shù)類型:
type?Option?func(o?options)?options
它被用來修改 Caser 的行為,cases 包可以找到相關 Option 的實例。
cases.Title 的返回類型是 Caser,這是一個結(jié)構(gòu)體,這里我們只關心它的 String 方法,它接收一個字符串,并返回一個經(jīng)過 Caser 處理過后的字符串。
所以,針對上文 strings.Title 的場景,可以改為 cases.Title 實現(xiàn)。
caser?:=?cases.Title(language.English)
caser.String("here?comes?o'brian")
得到的結(jié)果是:Here Comes O'brian。
03 總結(jié)
Go 語言很強的地方之一就是它的標準庫。其實除了標準庫,golang.org/x 相關庫也是一個大寶藏,需要什么功能,如果標準庫沒有,可以優(yōu)先看看 golang.org/x 有沒有提供相關庫。后續(xù)我也會不斷介紹 golang.org/x 一些庫的用法。
我是 polarisxu,北大碩士畢業(yè),曾在 360 等知名互聯(lián)網(wǎng)公司工作,10多年技術(shù)研發(fā)與架構(gòu)經(jīng)驗!2012 年接觸 Go 語言并創(chuàng)建了 Go 語言中文網(wǎng)!著有《Go語言編程之旅》、開源圖書《Go語言標準庫》等。
堅持輸出技術(shù)(包括 Go、Rust 等技術(shù))、職場心得和創(chuàng)業(yè)感悟!歡迎關注「polarisxu」一起成長!也歡迎加我微信好友交流:gopherstudio
