在使用了一些Go HTML模板之后,我找到的所有循环遍历模板中的对象的示例都是将切片 struct 传递给模板,与下面的示例有些类似:

type UserList struct {
    Id   []int
    Name []string
}

var templates = template.Must(template.ParseFiles("main.html"))

func rootHandler(w http.ResponseWriter, r *http.Request) {
    users := UserList{
        Id:   []int{0, 1, 2, 3, 4, 5, 6, 7},
        Name: []string{"user0", "user1", "user2", "user3", "user4"},
    }
    templates.ExecuteTemplate(w, "main", &users)
}

"主"模板为:

{{define "main"}}
    {{range .Name}}
        {{.}}
    {{end}}
{{end}}

这是可行的,但是我不明白如果我只在.Name属性上定位,我应该如何将每个ID显示在其相应名称的旁边.我会发现,在显示时将每个用户视为对象来对其属性进行分组更符合逻辑.

因此,我的问题是:

What if I wanted to pass a slice of structs to the template?使这项工作有效的语法是什么?我还没有找到或理解如何在官方的html/模板文档中使用.

type User struct {
    Id   int
    Name string
}
type UserList []User
var myuserlist UserList = ...

还有一个模板看起来有点像这样:(这里的语法是故意错误的,只是为了理解)

{{define "main"}}
    {{for each User from myuserlist as myuser}}
        {{myuser.Id}}
        {{myuser.Name}}
    {{end}}
{{end}}

推荐答案

使用:

{{range .}}
    {{.Id}}
    {{.Name}}
{{end}}

用于模板.
下面是一个例子:http://play.golang.org/p/A4BPJOcfpB
您需要阅读更多有关包概述中的"点"的信息,以了解如何正确使用它.http://golang.org/pkg/text/template/#pkg-overview(检出管道零件)

Go相关问答推荐

从Kafka到Clickhouse的实时消费数据

将Go程序导出到WASM—构建约束排除所有Go文件

为什么在GO中打印变量会导致堆栈溢出?

如何复制*C.char?

如何在Golang中覆盖404

切片的下限和上限

如何解决构建Docker Compose时的权限被拒绝问题

在 Go 中解组编号的 XML 标签

Github Actions Go lambda 项目不同的 sha256sums

Golang 网络应用程序安全性:您是否应该判断输入是否为有效的 utf-8?

在 Cloud Run 中找不到默认凭据

当图像是对象数组的元素时,如何显示存储为页面资源的图像?

在 go 中将运行命令的标准输出发送到其标准输入

如何使用 math/big 对 bigInt 进行取模?

Go:等待多个通道的性能损失

Go 加密库创建的 PKCS1 公钥与openssl rsa ...之间的区别

Grafana/Prometheus 将多个 ip 可视化为查询

Go lang - 惯用的默认后备

为什么 go-cmp Equal() 说 struct 不是完全相等的,即使所有字段都非常相等?

带有 *s3.S3 对象的 Golang 单元测试