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

取消引用 golang 文本/模板中的指针

取消引用 golang 文本/模板中的指针

Go
三国纷争 2021-12-20 09:47:03
在 golang模板中,当简单地输出值时,指针似乎会自动取消引用。当.ID是一个指向int,{{.ID}} 输出 5但是当我尝试在管道中使用它时,{{if eq .ID 5}}出现错误。executing "mytemplate" at <eq .ID 5>: error calling eq: invalid type for comparison如何取消引用模板管道内的指针?
查看完整描述

1 回答

?
HUH函数

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

一种方法是注册一个取消引用指针的自定义函数,这样您就可以将结果与您想要的任何内容进行比较或对其进行任何其他操作。


例如:


func main() {

    t := template.Must(template.New("").Funcs(template.FuncMap{

        "Deref": func(i *int) int { return *i },

    }).Parse(src))

    i := 5

    m := map[string]interface{}{"ID": &i}

    if err := t.Execute(os.Stdout, m); err != nil {

        fmt.Println(err)

    }

}


const src = `{{if eq 5 (Deref .ID)}}It's five.{{else}}Not five: {{.ID}}{{end}}`

输出:


It's five.

或者,您可以使用不同的自定义函数,该函数将接受一个指针和一个非指针,并进行比较,例如:


    "Cmp":   func(i *int, j int) bool { return *i == j },

并从模板调用它:


{{if Cmp .ID 5}}It's five.{{else}}Not five: {{.ID}}{{end}}

输出是一样的。在Go Playground上试试这些。


查看完整回答
反对 回复 2021-12-20
  • 1 回答
  • 0 关注
  • 258 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号