用我的结构Golang从切片显示表格

时间:2019-05-25 14:37:54

标签: html http go web

我想显示一个表格,每一行都包含我的结构数据。

这是我的结构:

type My_Struct struct {
FIRST_FIELD       string
SECOND_FIELD      string
THIED_FIELD       string
}

这是我的html代码:

<table id="t01">
<tr>
    <th>FIRST FIELD</th>
    <th>SECOND FIELD</th>
    <th>THIRD FIELD</th>
</tr>
<tr>
    <td>FIRST_OBJ_HERE_SHOULD_BE_THE_FIRST_FIELD</td>
    <td>FIRST_OBJ_HERE_SHOULD_BE_THE_SECOND_FIELD</td>
    <td>FIRST_OBJ_HERE_SHOULD_BE_THE_THIRD_FIELD</td>
</tr>

<tr>
    <td>SECOND_OBJ_HERE_SHOULD_BE_THE_FIRST_FIELD</td>
    <td>SECOND_OBJ_HERE_SHOULD_BE_THE_SECOND_FIELD</td>
    <td>SECOND_OBJ_HERE_SHOULD_BE_THE_THIRD_FIELD</td>
</tr>

</table>

如您所见,我想将包含我的结构的切片(每个包含3个文件)传递给此html代码,并且希望将整个切片设置在此表中-每行包含一个struct数据。 / p>

我该如何实现?

谢谢!

1 个答案:

答案 0 :(得分:1)

似乎您想要Go Template软件包。

这是一个如何使用它的示例: 定义一个处理程序,该处理程序将带有一些已定义字段的结构实例传递给使用Go模板的视图:

type MyStruct struct {
        SomeField string
}

func MyStructHandler(w http.ResponseWriter, r *http.Request) {
        ms := MyStruct{
                SomeField: "Hello Friends",
        }

        t := template.Must(template.ParseFiles("./showmystruct.html"))
t.Execute(w, ms)
}

在您的视图(showmystruct.html)中使用Go Template语法访问结构字段:

<!DOCTYPE html>
<title>Show My Struct</title>
<h1>{{ .SomeField }}</h1>

更新

如果您特别希望传递列表并对其进行遍历,那么{{ range }}关键字将很有用。另外,有一种非常常见的模式(至少在我的世界中),您将PageData{}结构传递给视图。

这是一个扩展的示例,添加了一个结构列表和一个PageData结构(因此我们可以在模板中访问其字段):

type MyStruct struct {
    SomeField string
}

type PageData struct {
    Title string
    Data []MyStruct
}

func MyStructHandler(w http.ResponseWriter, r *http.Request) {
        data := PageData{
            Title: "My Super Awesome Page of Structs",
            Data: []MyStruct{
                MyStruct{
                    SomeField: "Hello Friends",
                },
                MyStruct{
                    SomeField: "Goodbye Friends",
                },
            }

        t := template.Must(template.ParseFiles("./showmystruct.html"))
        t.Execute(w, data)

}

以及修改后的模板(showmystruct.html):

<!DOCTYPE html>
<title>{{ .Title }}</title>
<ul>
  {{ range .Data }}
    <li>{{ .SomeField }}</li>
  {{ end }}
</ul>