Tôi đang cố gắng viết một mẫu (sử dụng html/template) và truyền cho nó một cấu trúc có một số phương thức được đính kèm, nhiều phương thức trả về nhiều giá trị. Có cách nào để truy cập chúng từ bên trong khuôn mẫu không? Tôi muốn có thể làm điều gì đó như:Sử dụng các phương thức có nhiều giá trị trả về
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)
}
Nhưng rõ ràng điều này không hiệu quả. Không có cách nào xung quanh nó?
tôi đã xem xét việc tạo ra một cấu trúc vô danh trong mã của tôi:
data := struct {
Foo
a int
b int
}{
f,
0,
0,
}
data.a, data.b = f.Baz()
Và qua đó, nhưng rất muốn có một cái gì đó trong mẫu. Ý tưởng nào? Tôi cũng đã thử viết một hàm wrapper mà tôi đã thêm vào funcMaps nhưng không bao giờ có thể làm việc đó cả.
Cảm ơn mọi đề xuất!
không thể gọi chức năng từ mẫu, đó là sự thật. bạn sẽ tiếp tục với 'hàm wrapper'? hiển thị các tác phẩm hiện tại của bạn trên đó và cho phép mọi người giúp bạn làm việc đó. –
Liên quan: [Văn bản/mẫu: “không thể gọi phương thức/chức năng với 0 kết quả.”] (Http://stackoverflow.com/questions/31221849/text-template-cant-call-method-function-with-0 -các kết quả). Giải pháp là như nhau: bạn phải tạo một hàm tùy chỉnh. – icza
Tôi đã cố gắng để thực hiện một chức năng (FirstValue) mà sẽ có một chức năng như là đối số của nó, và sau đó trở về chỉ là giá trị đầu tiên của đầu ra ban đầu. Thật không may có vẻ như tôi không thể vượt qua phương pháp thông qua trong mẫu để nó sẽ không hoạt động: {{FirstValue .Baz}} gọi .Baz()}} thay vì vượt qua nó, vì vậy nó không phải là đi. –