为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
慕森卡 2022-06-01 18:05:49
我正在使用go. text/template我想做类似的事情:method = some_varpath = 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 行在这里。my-templates 包含我已更改的模板。这些也由oapi-codegen. 此目录包含它们,我已经复制并更改了其中一些,并按照此处的指示执行了步骤。在我更改的其中一个模板中,我想使用contains. 最好的方法是什么?
查看完整描述

1 回答

?
SMILET

TA贡献1796条经验 获得超4个赞

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


你必须像这样对eqand的参数进行分组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


查看完整回答
反对 回复 2022-06-01
  • 1 回答
  • 0 关注
  • 100 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信