【发布时间】:2019-04-28 01:53:59
【问题描述】:
我正在尝试编写一个模板(使用 html/template)并向它传递一个结构,该结构附加了一些方法,其中许多方法返回多个值。有没有办法从模板中访问这些?我希望能够做类似的事情:
package main
import (
"fmt"
"os"
"text/template"
)
type Foo struct {
Name string
}
func (f Foo) Baz() (int, int) {
return 1, 5
}
const tmpl = `Name: {{.Name}}, Ints: {{$a, $b := .Baz}}{{$a}}, {{b}}`
func main() {
f := Foo{"Foo"}
t, err := template.New("test").Parse(tmpl)
if err != nil {
fmt.Println(err)
}
t.Execute(os.Stdout, f)
}
但这显然行不通。没有办法解决吗?
我考虑过在我的代码中创建一个匿名结构:
data := struct {
Foo
a int
b int
}{
f,
0,
0,
}
data.a, data.b = f.Baz()
并传递它,但更希望在模板中包含一些东西。有任何想法吗?我还尝试编写一个包装函数,将其添加到 funcMaps 但根本无法让它工作。
感谢您的任何建议!
【问题讨论】:
-
不能从模板调用函数,这是真的。那么你会继续使用
wrapper function吗?展示你目前的作品,让人们帮助你完成它。 -
相关:Text/template: “can't call method/function with 0 results.”。解决方法是一样的:你必须创建一个自定义函数。
-
我试图创建一个函数(FirstValue),它将另一个函数作为其参数,然后只返回原始输出的第一个值。不幸的是,我似乎无法在模板中传递该方法,因此它不起作用:{{FirstValue .Baz}} 调用 .Baz() }} 而不是传递它,所以这是不行的。跨度>
标签: go go-templates