如何在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()
。