[英]How do I print return value of a function?
這是我的函數定義,它返回一個字符串
"addClassIfActive": func(tab string, ctx *web.Context) string
我正在嘗試像這樣打印它:
<a href="/home/"{{ printf "%s" addClassIfActive "home" .Context }}>Home</a>
當我嘗試打印時,http響應將終止。
我究竟做錯了什么?
返回一個布爾值,然后使用if仍然有效,我仍然很好奇如何打印從函數返回的字符串
您遇到的問題是"home"
和.Context
將是printf
的3:rd和4:th參數,而不是addClassIfActive
。 addClassIfActive
的返回值成為printf
的2:nd參數。
但是解決方案很簡單: 您不必使用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)
}
}
輸出:
家庭內容
您不能在模板中調用函數。
您可以使用FuncMaps進行操作 :
templates.go
var t = template.New("base")
// ParseFiles or ParseGlob, etc.
templateHelpers := template.FuncMap{
"ifactive": AddClassIfActive,
}
t = t.Funcs(templateHelpers)
your_template.tmpl
...
<span class="stuff">{{ if eq .Context | ifactive }} thing {{ else }} another thing {{ end }}</span>
...
我沒有測試過這種確切的語法,但是我在其他地方使用FuncMaps。 請確保閱讀有關FuncMaps 上text / template的更好文檔,以獲取更多示例。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.