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

问题描述 投票:1回答:1

我正在使用gotext/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。最好的方法是什么?

go go-templates
1个回答
1
投票

模板中没有内置的contains函数,因此您必须为此注册函数。您可以使用标准库中的strings.Contains()函数。作为参考,此处列出了可用的内置模板功能:strings.Contains()

并且您必须像这样对Functionseq的参数进行分组:

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
© www.soinside.com 2019 - 2024. All rights reserved.