Hi [name]!
Your account is ready, your user name is: [user-name]
You have the following roles assigned:
[role#1], [role#2], ... [role#n]
要生成这样的电子邮件正文,可以使用以下静态模板:
const emailTmpl = `Hi {{.Name}}!
Your account is ready, your user name is: {{.UserName}}
You have the following roles assigned:
{{range $i, $r := .Roles}}{{if ne $i 0}}, {{end}}{{.}}{{end}}
`
在您的例子中,需要使用Sprintf()来格式化字符串。
func Sprintf(format string, a ...interface{}) string
根据格式说明符的Sprintf格式并返回结果字符串。
s := fmt.Sprintf("Good Morning, This is %s and I'm living here from last %d years ", "John", 20)
您的输出将是:
Sprintf是你要找的。
示例
您还可以在Errors example中看到它作为“围棋之旅”的一部分正在使用
一。简单字符串
对于“简单”字符串(通常适合一行),最简单的解决方案是使用^{} 和friends(^{} ,^{} )。这些函数类似于没有起始字母的函数,但是这些变量返回的结果是
string
,而不是打印到标准输出。例如:
变量
s
将使用以下值初始化:提示:如果只想连接不同类型的值,则可能不需要自动使用
Sprintf()
(需要格式字符串),因为Sprint()
正是这样做的。请参见以下示例:对于仅连接} ,在这里可以指定自定义分隔符
string
s,也可以使用^{string
(放置在要连接的字符串之间)。在Go Playground上试试这些。
2。复杂字符串(文档)
如果您试图创建的字符串更复杂(例如,多行电子邮件),那么
fmt.Sprintf()
的可读性和效率就会降低(尤其是在必须多次这样做的情况下)。为此,标准库提供了包^{} 和^{} 。这些包实现了用于生成文本输出的数据驱动模板。
html/template
用于生成对代码注入安全的HTML输出。它提供与包text/template
相同的接口,当输出为HTML时,应该使用它而不是text/template
。使用
template
包基本上要求您提供一个string
值形式的静态模板(在这种情况下,您只提供文件名),该值可能包含静态文本,以及在引擎处理模板并生成输出时处理和执行的操作。您可以提供静态模板中包含/替换的参数,这些参数可以控制输出生成过程。这些参数的典型形式是
struct
s和map
值,它们可以嵌套。示例:
例如,假设您要生成如下所示的电子邮件:
要生成这样的电子邮件正文,可以使用以下静态模板:
并提供这样的数据来执行它:
通常,模板的输出被写入^{} ,因此如果希望结果是} (实现
string
,请创建并写入^{io.Writer
)。执行模板并将结果作为string
:这将产生预期的输出:
在Go Playground上试试。
还请注意,自从Go 1.10以来,} 。用法非常相似:
bytes.Buffer
有一个更新、更快、更专业的替代方案,即:^{在Go Playground上试试这个。
注意:如果提供
os.Stdout
作为目标(它还实现io.Writer
),则还可以显示模板执行的结果:这将直接将结果写入
os.Stdout
。在Go Playground上试试这个。相关问题 更多 >
编程相关推荐