我对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。)也许还有其他东西。