gpt4 book ai didi

go - 文本/模板 : "can' t call method/function with 0 results. "

转载 作者:数据小太阳 更新时间:2023-10-29 03:06:55 24 4
gpt4 key购买 nike

如何在不返回任何值的模板中执行函数?这是示例:

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)
}

}
see this code in play.golang.org


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

最佳答案

Go 中的模板与其他语言(例如 PHP)中的模板不同。使用 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&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
}

或者,试试 playground version .

关于go - 文本/模板 : "can' t call method/function with 0 results. ",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31221849/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com