簡體   English   中英

如何打印函數的返回值?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM