doushansu9012 2015-07-04 14:39
浏览 3
已采纳

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

How can I execute function in templates that returns no value? Here is example:

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


I know that in templates shouldn't be much logic, but ignorance of running function that returns no value seems to me interesting issue.

  • 写回答

1条回答 默认 最新

  • dongping1689 2015-07-05 05:21
    关注

    Templates in Go are not like those in other languages (e.g. PHP). Use 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&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
    }
    

    Or, try the playground version.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 下图接收小电路,谁知道原理
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度
  • ¥30 关于#r语言#的问题:如何对R语言中mfgarch包中构建的garch-midas模型进行样本内长期波动率预测和样本外长期波动率预测
  • ¥15 ETLCloud 处理json多层级问题
  • ¥15 matlab中使用gurobi时报错
  • ¥15 这个主板怎么能扩出一两个sata口
  • ¥15 不是,这到底错哪儿了😭
  • ¥15 2020长安杯与连接网探