4 回答

TA貢獻(xiàn)1784條經(jīng)驗 獲得超9個贊
如文檔strings.Title中所述,已棄用,您應(yīng)該cases.Title改用。
棄用:Title 用于單詞邊界的規(guī)則不能正確處理 Unicode 標(biāo)點符號。請改用 golang.org/x/text/cases。
以下是如何從兩個角度使用它的示例代碼:
// Straightforward approach
caser := cases.Title(language.BrazilianPortuguese)
titleStr := caser.String(str)
// Transformer interface aware approach
src := []byte(s)
dest := []byte(s) // dest can also be `dest := src`
caser := cases.Title(language.BrazilianPortuguese)
_, _, err := caser.Transform(dest, src, true)
請務(wù)必查看transform.Transformer.Transform和cases.Caser以了解每個參數(shù)和返回值的含義,以及該工具的局限性。例如:
Caser 可能是有狀態(tài)的,因此不應(yīng)在 goroutine 之間共享。
關(guān)于language使用什么,您應(yīng)該知道它們在結(jié)果上的差異,除此之外,您應(yīng)該可以隨意選擇。這是煎魚的一份關(guān)于為我清除它的差異的總結(jié):
去游樂場:https ://go.dev/play/p/xp59r1BkC9L
func main() {
src := []string{
"hello world!",
"i with dot",
"'n ijsberg",
"here comes O'Brian",
}
for _, c := range []cases.Caser{
cases.Lower(language.Und),
cases.Upper(language.Turkish),
cases.Title(language.Dutch),
cases.Title(language.Und, cases.NoLower),
} {
fmt.Println()
for _, s := range src {
fmt.Println(c.String(s))
}
}
}
輸出如下
hello world!
i with dot
'n ijsberg
here comes o'brian
HELLO WORLD!
? W?TH DOT
'N ?JSBERG
HERE COMES O'BR?AN
Hello World!
I With Dot
'n IJsberg
Here Comes O'brian
Hello World!
I With Dot
'N Ijsberg
Here Comes O'Brian

TA貢獻(xiàn)1829條經(jīng)驗 獲得超4個贊
到目前為止,就像
strings.Title()
是在使用Und
或English
?
strings.Title()
基于 ASCII工作,cases.Title()
基于 Unicode 工作,沒有辦法獲得完全相同的行為。
我應(yīng)該使用 language.English 還是 language.AmericanEnglish 還是其他語言?
language.English
,language.AmericanEnglish
而且language.Und
似乎都有相同的Title規(guī)則。使用它們中的任何一個都應(yīng)該讓您最接近strings.Title()
您將要獲得的原始行為。
使用這個支持 Unicode 的包的全部意義在于它客觀上更正確。因此,請選擇適合您用戶的標(biāo)簽。

TA貢獻(xiàn)1779條經(jīng)驗 獲得超6個贊
strings.Title(str)已棄用,應(yīng)更改為cases.Title(language.Und, cases.NoLower).String(str)
package main
import (
"fmt"
"strings"
"golang.org/x/text/cases"
"golang.org/x/text/language"
)
func main() {
fmt.Println(strings.Title("abcABC")) // AbcABC
fmt.Println(cases.Title(language.Und, cases.NoLower).String("abcABC")) // AbcABC
}
游樂場:https ://go.dev/play/p/i0Eqh3QfxTx

TA貢獻(xiàn)1804條經(jīng)驗 獲得超7個贊
下面是一個簡單的示例,說明如何使用 golang.org/x/text 包將變量中每個字符串值的首字母大寫。
package main
import (
"fmt"
"golang.org/x/text/cases"
"golang.org/x/text/language"
)
func main() {
sampleStr := "with value lower, all the letters are lowercase. this is good for poetry perhaps"
caser := cases.Title(language.English)
fmt.Println(caser.String(sampleStr))
}
輸出:值較低時,所有字母均為小寫。也許這對詩歌有好處
游樂場示例:https ://go.dev/play/p/_J8nGVuhYC9
- 4 回答
- 0 關(guān)注
- 416 瀏覽
添加回答
舉報