如何在 go 模板中转换给定的代码
how to convert the given code in go templating
我正在使用 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 行是 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
并且您必须像这样对 eq
和 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 上尝试):
true
false
我正在使用 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 行是 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
并且您必须像这样对 eq
和 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 上尝试):
true
false