我正在使用go
的text/template
。我想做类似的事情:
method = some_var
path = some_other_var
if method is "GET" and "ID" in path
如何在go模板中执行此操作?我正在这样做。
{{- if and eq .Method "GET" contains "AssetID" .OperationId -}}
编辑:
事情是我正在使用openAPI生成服务器代码样板。因此,模板位于该存储库中。我正在做类似的事情:
$ go get github.com/deepmap/oapi-codegen/cmd/oapi-codegen
$ oapi-codegen \
-templates my-templates/ \
-generate types,server \
example-expanded.yaml
oapi-codegen上方的行是here。my-templates包含我已更改的模板。这些也由oapi-codegen
提供。thisdir包含它们,我已经复制并更改了其中的一些,并按照here的指示进行了操作。
在我更改的那些模板之一中,我想使用contains
。最好的方法是什么?
模板中没有内置的contains
函数,因此您必须为此注册函数。您可以使用标准库中的strings.Contains()
函数。作为参考,此处列出了可用的内置模板功能:strings.Contains()
并且您必须像这样对Functions和eq
的参数进行分组:
contains
注册{{if and (eq .Method "GET") (contains .AssetID .OperationId)}}
true
{{else}}
false
{{end}}
功能,解析模板并执行它的示例代码:
strings.Contains()
这将输出(在t := template.Must(template.New("").Funcs(template.FuncMap{
"contains": strings.Contains,
}).Parse(src))
params := map[string]interface{}{
"Method": "GET",
"AssetID": "/some/path/123",
"OperationId": "123",
}
if err := t.Execute(os.Stdout, params); err != nil {
panic(err)
}
params["OperationId"] = "xxx"
if err := t.Execute(os.Stdout, params); err != nil {
panic(err)
}
上尝试):
Go Playground