如何打印函数的返回值?

Chakradar Raju:

这是我的函数定义,它返回一个字符串

"addClassIfActive": func(tab string, ctx *web.Context) string

我正在尝试像这样打印它:

<a href="/home/"{{ printf "%s" addClassIfActive "home" .Context }}>Home</a>

当我尝试打印时,http响应将终止。

我究竟做错了什么?

返回一个布尔值,然后使用if仍然有效,我仍然很好奇如何打印从函数返回的字符串

阿尼斯:

你的问题是,"home".Context将是3:次和4:个参数printf,而不是的争论addClassIfActive的返回值addClassIfActive成为的第2个参数printf

但是解决方案很简单:您不必使用printf打印。

如果您的函数只返回一个字符串,则可以简单地通过编写以下命令来打印它:

{{addClassIfActive "home" .Context}}

完整的工作示例:

package main

import (
    "html/template"
    "os"
)

type Context struct {
    Active bool
}

var templateFuncs = template.FuncMap{
    "addClassIfActive": func(tab string, ctx *Context) string {
        if ctx.Active {
            return tab + " content"
        }

        // Return nothing
        return ""
    },
}

var htmlTemplate = `{{addClassIfActive "home" .Context}}`

func main() {
    data := map[string]interface{}{
        "Context": &Context{true}, // Set to false will prevent addClassIfActive to print
    }

    // We create the template and register out template function
    t := template.New("t").Funcs(templateFuncs)
    t, err := t.Parse(htmlTemplate)
    if err != nil {
        panic(err)
    }

    err = t.Execute(os.Stdout, data)
    if err != nil {
        panic(err)
    }

}

输出:

家庭内容

操场

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章