看看文章标题,我们应该澄清更好的含义以及文本格式是什么。让我们从前者开始。文本格式化是编程的重要组成部分;准备好的文本用于以下任务:
- 一些操作的描述/结果
- 详细日志
- 作为其他系统中数据选择的查询
- 以及许多其他领域。更好意味着
sf
(wissance.StringFormatter) 具有fmt
所没有的功能’t(请参阅第 1 章了解我们的文本格式化方法)。
1.可以做什么 sf
又名 Wissance.stringformatter
在我们之前的文章中,我们写的是sf
便利(便利是人类主观的东西;这里,我指的是基于我自己背景的便利)。但简单地说,将文本格式化为更方便:
userNews = stringFormatter.Format("嗨\"{0}\",查看最新消息:{1}", "john doe", "1.您中了1M$彩票,请告诉我们您的 VISA/MS 卡数据用于收款。”)
而不是:
userNews = fmt.Sprintf("嗨 \"%s\",查看最新消息:%s", "john doe", "1. 您中了 1M$ 彩票,请向我们提供您的 VISA /MS卡数据来收款。”)
直到版本 1.2.0
sf
无法进行更精确的参数格式化(即使用不同的数字表示法:bin
,hex
),从 1.2.0 开始,我们几乎可以完成 fmt
支持的所有操作:
- Bin 编号格式:
{0:B}
,15 个输出 ->1111
{0:B8}
,15 个输出 ->00001111
- 十六进制数字格式
{0:X}
,250 个输出 ->fa
{0:X4}
,250 个输出 ->00fa
- 十进制数字格式
{0:o}
,11 个输出 ->14
- 浮点数格式
{0:E2}
,191.0478 输出 ->1.91e+02
{0:F}
,10.4567890 输出 ->10.456789
{0:F4}
,10.4567890 输出 ->10.4568
{0:F8}
,10.4567890 输出 ->10.45678900
- 百分比输出
{0:P100}
,12 个输出 ->12%
sf
有两种字符串格式方法:Format
和 FormatComplex
。后者还允许传递参数格式,如 Format
方法。
让我们考虑一个最小的例子:
- 我们应该使用以下格式构建文本
“今天温度为 {temp},湿度为 {hum}
,其中{temp}
和{hum}< /code> 应替换为实际传感器值。
- 我们希望指定
{temp}
和{hum}
输出,即{temp}
点后应有四位数字和{hum}
必须以百分比形式输出。分析这些要求后,我们将模板修改如下:“今天温度为 {temp:F4},湿度为 {hum:P100}”
。 - 像这样传递
12.3456
和60
:
sf.FormatComplex("今天温度是 {temp:F4},湿度是 {hum:P100}", map[string]any {"temp":12.3456, "hum":60})
可以在 FormatComplex
单元测试中找到更多示例,请参阅存储库及下面的内容:
func TestFormatComplexWithArgFormatting(t *testing.T) { for name, test := range map[string]struct { template string args map[string]any Expected string }{ "numeric_test_1": { template: "This是仅具有数字格式的文本:science - {mass} / {mass : e2}",args:map[string]any{"mass":191.0784},预期:"这是仅具有数字格式的文本:科学 - 191.0784 / 1.91e+02", }, "numeric_test_2": { template: "这是具有唯一数字格式的文本:二进制 - {bin:B} / {bin : B8},十六进制 - {hex:X } / {hex : X4}",args:map[string]any{"bin":15,"hex":250},预期:"这是具有唯一数字格式的文本:二进制 - 1111 / 00001111,十六进制- fa / 00fa", }, "numeric_test_3": { template: "这是具有唯一数字格式的文本:十进制 - {float:F} / {float : F4} / {float:F8}", args: map [string]any{"float": 10.5467890},预期:"这是只有数字格式的文本:十进制 - 10.546789 / 10.5468 / 10.54678900", }, } { t.Run(name, func(t *testing. T) {assert.Equal(t, test.expected, stringFormatter.FormatComplex(test.template, test.args)) }) }
}
很明显,我们有方便的(对于具有C#
、Python
背景的人)用于文本格式化的库< /强>。但我们还有另一个优势:性能,sf
使格式化比 fmt
**更快 >**。
2.性能优势
还有一件更重要的事情可以区分 sf
库:它在具有参数格式规范和不具有参数格式规范的格式化情况下都具有性能提升。但是 FormatComplex
比 fmt
快两倍,结果见下图:
a>3。结论
今天,我们可以说还有又一个文本格式化实用程序/lib,其中包含所有 fmt
功能,并且该库处理文本的速度更快,这在某些情况下可能很重要。请在 GitHub 上给我们加星并订阅。