正如文档中提到的字符串.标题 https://pkg.go.dev/strings#Title已弃用,您应该使用cases.Title
反而。
已弃用:标题用于单词边界的规则不处理
Unicode 标点符号正确。请改用 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)
请务必查看变换.变压器.变换 https://pkg.go.dev/golang.org/x/text/transform#Transformer.Transform and 案例.Caser https://pkg.go.dev/golang.org/x/text/cases#Caser以了解每个参数和返回值的含义以及该工具的局限性。例如:
Caser 可能是有状态的,因此不应在之间共享
协程。
关于什么language
使用时,您应该意识到它们在结果上的差异,除此之外,您应该可以接受任何选择。这是来自的副本煎鱼对差异的总结 https://segmentfault.com/a/1190000041413266/en这为我清除了:
去游乐场:https://go.dev/play/p/xp59r1BkC9L 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