建议here人名应大写,如John William Smith
。
我正在用Golang写一个小软件,它从用户的表单输入中获取姓和名。
在Go 1.18之前,我使用的是:
lastname = strings.Title(strings.ToLower(strings.TrimSpace(lastname)))
firstname = strings.Title(strings.ToLower(strings.TrimSpace(firstname)))
它的工作,但现在去1.18 has deprecated strings.Title()
。
他们建议改用golang.org/x/text/cases
。
所以我想我应该把我的代码改成这样:
caser := cases.Title(language.Und)
lastname = caser.Title(strings.ToLower(strings.TrimSpace(lastname)))
firstname = caser.Title(strings.ToLower(strings.TrimSpace(firstname)))
它的工作原理和以前一样。
不同之处在于,像ijsland
这样的荷兰语单词应该命名为IJsland
,而不是Ijsland
。
问题
在caser := cases.Title(language.Und)
行中,我使用Und
,因为我不知道要使用什么语言的Tag。
我应该使用language.English
、language.AmericanEnglish
还是其他?
到目前为止,它是像strings.Title()
使用Und
或English
?
4条答案
按热度按时间o4tp2gmn1#
如文档strings.Title中所述,不推荐使用,应改用
cases.Title
。已弃用:标题用于单词边界的规则无法正确处理Unicode标点符号。请改用golang.org/x/text/cases。
下面是一个示例代码,说明如何从两个Angular 使用它:
确保查看transform.Transformer和cases.Caser,以便了解每个参数和返回值的含义,以及工具的限制。例如:
一个Caser可能是有状态的,因此不应该在goroutine之间共享。
关于使用什么
language
,你应该知道它们在结果上的差异,除此之外,你应该可以接受任何选择。下面是一个来自煎鱼's summary on the differences的副本,它为我清除了它:GoPlayground:https://go.dev/play/p/xp59r1BkC9L
具有以下输出
lrl1mhuk2#
到目前为止,它是像
strings.Title()
使用Und
或English
?strings.Title()
工作于based on ASCII,而cases.Title()
基于Unicode工作,因此无法获得完全相同的行为。我应该用英语还是美语?
language.English
、language.AmericanEnglish
和language.Und
看起来都有same Title rules。使用其中任何一个都可以让你最接近原始的strings.Title()
行为。使用这个支持Unicode的包的全部意义在于它在客观上更正确。所以选择一个适合你的用户的标记。
ttisahbt3#
strings.Title(str)
已过时,应更改为cases.Title(language.Und, cases.NoLower).String(str)
Playground:https://go.dev/play/p/i0Eqh3QfxTx
qyzbxkaa4#
下面是一个简单的示例,说明如何使用www.example.com包将变量中每个字符串值的首字母大写golang.org/x/text。
输出:值越小,所有字母都是小写。这可能对诗歌有好处
Playground示例:https://go.dev/play/p/_J8nGVuhYC9