文本/模板:“不能用0结果调用方法/函数”。 [英] Text/template: "can't call method/function with 0 results."
问题描述
如何在不返回任何值的模板中执行函数?这里是例子: Go中的模板不像其他语言中的模板(例如PHP)。使用 或者,尝试使用游乐场版本。 How can I execute function in templates that returns no value? Here is example:
see this code in play.golang.org
Templates in Go are not like those in other languages (e.g. PHP). Use Or, try the playground version. 这篇关于文本/模板:“不能用0结果调用方法/函数”。的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
pre $ func main(){
u,err:= url.Parse(http:// example.com/test?param1=true¶m2=true)
if err!= nil {
log.Fatal(err)
}
m:= u.Query( )
m.Del(param1)// param1成功删除!
u.RawQuery = m.Encode()
fmt.Println(u.RawQuery)
const tmpl =`
{{$ m:= .Query} }
{{$ m.Delparam2}}<! - 无法删除param2! - >
{{.RawQuery}}
`
t:= template.Must(template.New()。Parse(tmpl))
err = t.Execute(os。 Stdout,u)
if err!= nil {
log.Println(execution template:,err)
}
}
我知道在模板中不应该有太多的逻辑,但对无法返回任何值的运行函数的无知似乎对我而言有趣的问题。 template.FuncMap
为您的模板创建自定义函数。
package main
import(
fmt
log
net / url
os
text / template
)
func main(){
funcMap:= template.FuncMap {
delete:deleteMap,
}
u,err:= url.Parse(http://example.com/test?param1=true& )
if err!= nil {
log.Fatal(err)
}
u = deleteMap(u,param1)//作品在常规代码和模板中
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(execution template:,err )
}
}
func deleteMap(u * url.URL,关键字符串)* url.URL {
m:= u.Query( )
m。Del(key)// key已成功删除!
u.RawQuery = m.Encode()
return u
}
func main() {
u, err := url.Parse("http://example.com/test?param1=true¶m2=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)
}
}
I know that in templates shouldn't be much logic, but ignorance of running function that returns no value seems to me interesting issue.template.FuncMap
to create custom functions for your templates. package main
import (
"fmt"
"log"
"net/url"
"os"
"text/template"
)
func main() {
funcMap := template.FuncMap{
"delete": deleteMap,
}
u, err := url.Parse("http://example.com/test?param1=true¶m2=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
}