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

how to convert the given code in go templating

我正在使用 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 提供。 this 目录包含它们,我已经复制并更改了其中的一些,并按照 here.

指示的步骤进行操作

在我更改的其中一个模板中,我想使用 contains。 执行此操作的最佳方法是什么?

模板中没有内置 contains 函数,因此您必须为此注册您的函数。您可以使用 strings.Contains() function from the standard lib. For reference, the available builtin template functions are listed here: Functions

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

{{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 上尝试):

true

false