加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

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

发布时间:2020-12-16 19:26:20 所属栏目:大数据 来源:网络整理
导读:在golang template内部,当简单地输出值时,似乎指针被自动解除引用.当.ID是指向int的指针时, {{.ID}}输出5 但是当我尝试在管道中使用它时,{{if eq .ID 5}}我收到错误. 在 eq .ID 5执行“mytemplate”:错误调用eq:无效类型进行比较 如何在模板管道中取消引用
在golang template内部,当简单地输出值时,似乎指针被自动解除引用.当.ID是指向int的指针时,

{{.ID}}输出5

但是当我尝试在管道中使用它时,{{if eq .ID 5}}我收到错误.

在< eq .ID 5>执行“mytemplate”:错误调用eq:无效类型进行比较

如何在模板管道中取消引用指针?

一种方法是注册一个取消引用指针的自定义函数,这样你就可以将结果与你想要的结果进行比较,或者用它做任何其他事情.

例如:

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上试试这些.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读