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

如何在go模板中转换给定代码,go,go-templates,Go,Go Templates,我正在使用go的text/template。我想做一些类似的事情: method = some_var path = some_other_var if method is "GET" and "ID" in path $ go get github.com/deepmap/oapi-codegen/cmd/oapi-codegen $ oapi-codegen \ -templates my-templates/ \ -generate types,server \

我正在使用
go
text/template
。我想做一些类似的事情:

method = some_var
path = some_other_var    
if method is "GET" and "ID" in path
$ go get github.com/deepmap/oapi-codegen/cmd/oapi-codegen
$ oapi-codegen \
    -templates my-templates/ \
    -generate types,server \
    example-expanded.yaml  
如何在go模板中执行此操作?我是这样做的

{{- if and eq .Method "GET" contains "AssetID" .OperationId -}}
编辑:

问题是我正在使用它生成一个服务器代码样板。所以模板就在回购协议中。我是这样做的:

method = some_var
path = some_other_var    
if method is "GET" and "ID" in path
$ go get github.com/deepmap/oapi-codegen/cmd/oapi-codegen
$ oapi-codegen \
    -templates my-templates/ \
    -generate types,server \
    example-expanded.yaml  
上面的oapi代码行是。 我的模板包含我已更改的模板。这些也由
oapi codegen
提供。dir包含它们,我已经复制和更改了其中的一些,并按照指示的步骤进行了操作

在我更改的其中一个模板中,我想使用
contains

最好的方法是什么?

模板中没有内置的
包含
函数,因此您必须为此注册函数。您可以使用标准库中的函数。此处列出了可用的内置模板函数,以供参考:

您必须将
eq
包含的参数分组如下:

{{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)
}
这将输出(在上尝试):


没有注册这个函数还有其他方法吗?@rayan是的,如果值有方法,那么你可以调用这些方法而不注册任何函数。嘿,我对这个问题进行了编辑。请你看一下好吗。很抱歉,您可能需要进行一些阅读。@rayan我不熟悉这些模板,但看起来其中一些模板用于生成Go代码,这意味着您可以在这些模板中编写任何有效的Go代码,包括使用
strings.Contains()