如何在Go中使用间接模板函数链接多个条件?
我想检查.hello
是否不包含“world”和.world
是否不包含“hello”,但我不能,因为我收到了2009/11/10 23:00:00 executing template: template: content:2:5: executing "content" at <not>: wrong number of args for not: want 1 got 2
错误消息
package main
import (
"log"
"os"
"strings"
"text/template"
)
var (
templateFuncMap = template.FuncMap{
"contains": strings.Contains,
}
)
func main() {
// Define a template.
const temp = `
{{if not (contains .hello "hello") (contains .world "hello") }}
passed
{{else}}
not passed
{{end}}`
s := map[string]string{
"hello": "world",
"world": "hello",
}
t := template.Must(template.New("content").Funcs(templateFuncMap).Parse(temp))
err := t.Execute(os.Stdout, s)
if err != nil {
log.Println("executing template:", err)
}
}
字符串
Go playground链接:https://go.dev/play/p/lWZwjbnSewy
2条答案
按热度按时间irlmq6kh1#
not
需要一个参数,因此必须使用括号。如果是这样,则要求反的条件为
contains "hello" or contains "world"
:字符串
这将输出(在Go Playground上尝试):
型
您也可以将此条件写成
not contains "hello" and not contains "world"
,如下所示:型
wlzqhblo2#
另一种方法是将模板函数修改为
notContains
,其中not
操作在函数本身中执行,然后从模板字符串中删除not
。例如:
字符串
模板中的用法:
型
Playground:https://go.dev/play/p/t5Xg3t4xWgr