<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Go1.18 快訊:廢棄了這個 API

          共 1982字,需瀏覽 4分鐘

           ·

          2021-11-08 08:51

          閱讀本文大概需要 5 分鐘。

          大家好,我是 polarisxu。

          從 11 月 01 日起,Go1.18 就凍結(jié)了,也就是 1.18 的功能已經(jīng)確定。

          release freeze

          今天介紹一個 Go1.18 廢棄的 API,同時介紹響應的替代 API。

          01 strings.Title 被廢棄

          查看 go tip 標準庫文檔,發(fā)現(xiàn) strings.Title 被標識為 deprecated:https://pkg.go.dev/strings@master,而且該 API 的文檔默認被折疊了。

          deprecated

          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

          瀏覽 120
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  午夜撸一撸 | 啊啊啊无码 | 色欧美在线播放 | 天天综合永久入口 | 成人免费性爱网站 |