如何在 go 模板中转换给定的代码

我正在使用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 行在这里。my-templates 包含我已更改的模板。这些也由oapi-codegen. 此目录包含它们,我已经复制并更改了其中一些,并按照此处的指示执行了步骤。


在我更改的其中一个模板中,我想使用contains. 最好的方法是什么?


慕森卡
浏览 101回答 1
1回答

SMILET

模板中没有内置contains函数,因此您必须为此注册函数。您可以使用strings.Contains()标准库中的函数。作为参考,这里列出了可用的内置模板函数:函数你必须像这样对eqand的参数进行分组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上尝试):truefalse
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go