Go模板比较字符串是否以另一个字符串结尾或包含另一个字符串。

huangapple go评论84阅读模式
英文:

Go Template compare if string ends in or contains another string

问题

eq函数允许比较两个字符串是否相等。

{{if eq .Name "MyName"}}

有没有一种方法可以测试一个字符串是否以另一个字符串结尾(或包含)?

英文:

The eq function allows for comparing if two strings are equal

{{if eq .Name "MyName"}}

Is there a way to test if a string ends in (or contains) another string?

答案1

得分: 6

使用包含相关字符串函数的函数映射

funcs := map[string]interface{}{
    "contains":  strings.Contains,
    "hasPrefix": strings.HasPrefix,
    "hasSuffix": strings.HasSuffix,
}

tmpl := `{{if hasSuffix . ".txt"}}yes!{{end}}`
t := template.Must(template.New("").Funcs(funcs).Parse(tmpl))

t.Execute(os.Stdout, "example.txt") // 将yes!写入标准输出

playground上运行示例

一些使用Go模板作为功能的应用程序(例如Hugo和Helm)默认提供这些函数。

(感谢mkopriva)

英文:

Use a function map containing the relevant string functions.

funcs := map[string]any{
	"contains":  strings.Contains,
	"hasPrefix": strings.HasPrefix,
	"hasSuffix": strings.HasSuffix}

tmpl := `{{if hasSuffix . ".txt"}}yes!{{end}}`
t := template.Must(template.New("").Funcs(funcs).Parse(tmpl))

t.Execute(os.Stdout, "example.txt") // writes yes! to standard out

Run the example on the playground.

Some applications that use Go templates as a feature (Hugo and Helm are examples) provide these functions by default.

(h/t to mkopriva).

huangapple
  • 本文由 发表于 2022年6月10日 06:01:03
  • 转载请务必保留本文链接:https://go.coder-hub.com/72567106.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定