当前位置: 首页 > 面试题库 >

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

裘禄
2023-03-14
问题内容

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

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中看到此代码

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


问题答案:

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
}

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



 类似资料:
  • 问题内容: 假设我有 如何从html / template使用此方法?我的模板中需要这样的东西: 问题答案: 只需省略括号就可以了。例: 根据文档,您可以调用任何返回一个值(任何类型)或两个值(如果第二个是type)的方法。在后一种情况下,如果该错误为非nil ,则将返回该错误并停止执行模板。

  • std=C14的g在函子类的模板方法(本身不是模板)上给我一个“无法推断模板参数'Key'”错误。我不知道为什么。代码看起来应该可以工作。 我正在实现一个2-3树,它有一个采用函子的层次顺序遍历方法。操作人员tree23代码基本上是这样的: 级别顺序遍历调用仿函数的函数调用操作符,向其传递两个参数。 函子非常简单:

  • 我试图在测试中模拟一个调用,但我得到了一个错误,因为它调用了真正的方法,而不是模拟它。 这是我的方法 } 这是我的测试课 测试实际上调用了受保护的方法config Setter,并在设置代理时失败。帮助我理解我在这里做错了什么。

  • 我开始把头撞到墙上,但我完全不明白如何在间谍类上调用真正的方法。 长话短说,我正在监视我的测试类,以存根一个私有方法。然后我想调用测试类的real void方法,但它说 testedmethod是一个空方法,不能用返回值来存根它! 问题是,我不需要把它存根。我也尝试过doCallRealMethod(),没有用。 我正在使用静态编程语言和Android Studio为我的Android项目运行一些

  • 我学习了一些关于variadic模板的知识,并在Internet上搜索了一些示例,现在尝试编写一些棘手的代码来调用member一个variadic类模板的方法,其中包含一个字段。我不明白为什么它不起作用。拜托,救命。 以下是示例类: 和来自Main的呼叫: 错误: main.cpp 1>d:\drafts_tests\main.cpp(203):错误C2198:“void(__thiscall f

  • 这是我的控制器: 这是我访问http://localhost:8080/area/1时得到的: 无法转换“java”类型的值。lang.String'转换为必需的类型'int';嵌套的例外是java。lang.NumberFormatException:对于输入字符串:“asd3333”] 我测试了这个随机返回,只是为了显示发生了什么...该方法首先用请求中的@PathVariable=1调用,然