文字/模​​板:“无法使用0个结果调用方法/函数”

【字号: 日期:2024-04-07浏览:34作者:雯心
(adsbygoogle = window.adsbygoogle || []).push({}); 如何解决文字/模​​板:“无法使用0个结果调用方法/函数”?

Go中的模板与其他语言(例如PHP)中的模板不同。使用template.FuncMap为您的模板创建自定义功能。

package mainimport ( 'fmt' 'log' 'net/url' 'os' 'text/template')func main() { funcMap := template.FuncMap{'delete': deleteMap, } u, err := url.Parse('http://example.com/test?param1=true&param2=true') if err != nil {log.Fatal(err) } u = deleteMap(u, 'param1') // works in regular code and templates fmt.Println(u.RawQuery) const tmpl = ` {{$m := delete . 'param2'}} <!-- WORKS! --> {{$m.RawQuery}} ` t := template.New('').Funcs(funcMap) t = template.Must(t.Parse(tmpl)) err = t.Execute(os.Stdout, u) if err != nil {log.Println('executing template:', err) }}func deleteMap(u *url.URL, key string) *url.URL { m := u.Query() m.Del(key) // key successful deleted! u.RawQuery = m.Encode() return u}

或者,尝试使用游乐场版本。

解决方法

如何在不返回值的模板中执行功能?这是示例:

func main() { u,err := url.Parse('http://example.com/test?param1=true&param2=true') if err != nil {log.Fatal(err) } m := u.Query() m.Del('param1') // param1 successful deleted! u.RawQuery = m.Encode() fmt.Println(u.RawQuery) const tmpl = ` {{$m := .Query}} {{$m.Del 'param2'}} <!-- failed to delete param2! --> {{.RawQuery}} ` t := template.Must(template.New('').Parse(tmpl)) err = t.Execute(os.Stdout,u) if err != nil {log.Println('executing template:',err) }}

在play.golang.org中看到此代码

我知道模板中的逻辑不应该太多,但是对无返回值的运行函数的无知对我来说似乎是一个有趣的问题。

相关文章: