我对golang很陌生。几个月前我开始使用 golang 编程,因为我必须基于现有的 golang 开源项目开发一个解决方案。
Golang 与 C#、Java 或 Python 等其他流行语言不同,在许多方面它类似于现代版本的 C 语言。
在我看来,golang sdk 缺少一件事,即复合字符串格式,考虑到上述其他语言以某种形式支持此功能,这令人惊讶。例如,在 Java 中,您可以通过调用 String.format 来使用它,而在 Python 中,它可以通过 "".format() 来使用。
让我们仔细看看这个问题。以下是 Java 中复合格式的示例:
String.format("Hello, mr. {0}. You are here: {1}.
Good luck mr. {0} and have a nice day.", "Smith", "Office");
进入全屏模式 退出全屏模式
为了在 Golang 中重现这个函数的行为,我们通常会这样做:
fmt.Sprintf("Hello, mr. %s. You are here: %s.
Good luck mr. %s. and have a nice day", "Smith", "Office", "Smith").
进入全屏模式 退出全屏模式
这不是很方便,因为我们必须两次传递“Smith”参数。这只是一个重复值,想象一下如果我们必须处理一大堆它们会变得多么混乱。
因此,在摸索了一会儿之后,我决定发明自己的轮子,并在 golang 中提供类似于 C# 或 Python 中的字符串格式。我制作了一个小库,目前包含两个格式化函数,您可以在此处找到。
我的函数允许我使用索引 {0}、{1} 来格式化字符串:
str = Format("Hello {0}, we are greeting you here: {1}!", "manager", "salesApp")
进入全屏模式 退出全屏模式
或命名占位符:
str = FormatComplex("Hello {user}, what are you doing here {app} ?", map[string]string{"user":"vpupkin", "app":"mn_console"})
进入全屏模式 退出全屏模式
自建库以来,我一直在积极使用这些函数来格式化:
数据库连接字符串,
基于模板的 URL
给最终用户的复杂信息
以下是如何在任何 golang 项目中使用它的示例:
import "github.com/wissance/stringFormatter"
func CreateDbConnectionStr() string {
connStrTemplate := "host={0} port={1} user={2} dbname={3} password={4} sslmode={5}"
connStr, err := stringFormatter.format(connStrTemplate, "127.0.0.1", "5432", "developer", "test_db", "q1w2e3r4", "disable")
return connStr
}
进入全屏模式 退出全屏模式
不幸的是,目前,我的函数不能完全替代 fmt.Scanf,因为它们仅适用于字符串,而 fmt.Scans 允许任何类型的参数。但我也计划添加对此功能的支持。此外,我将添加对格式项目对齐的支持(即,对于双精度/浮点数 {0: 0.##},如果我们通过 123.4567,我们将得到 123.45。)也许还有其他东西。