gpt4 book ai didi

go - 使用具有多个返回值的方法

转载 作者:IT王子 更新时间:2023-10-29 01:27:12 26 4
gpt4 key购买 nike

我正在尝试编写一个模板(使用 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,但根本无法让它工作。

感谢您的任何建议!

最佳答案

您将无法调用在模板中返回两个值的函数,除非其中一个值是错误的。这是为了保证您的模板在运行时工作。有一个很好的答案可以解释 here ,如果您有兴趣的话。

要解决您的问题,您需要 1) 将您的函数分解为两个单独的 getter 函数,您可以在模板中的适当位置调用它们;或 2) 让您的函数返回一个包含内部值的简单结构。

我不知道哪个更适合您,因为我真的不知道您的实现需要什么。 Foo 和 Baz 没有提供太多线索。 ;)

这是选项一的一个简单的例子:

type Foo struct {
Name string
}

func (f Foo) GetA() (int) {
return 1
}

func (f Foo) GetB() (int) {
return 5
}

然后相应地修改模板:

const tmpl = `Name: {{.Name}}, Ints: {{.GetA}}, {{.GetB}}`

希望对您有所帮助。 :)

关于go - 使用具有多个返回值的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31287325/

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