首页 > 解决方案 > 访问切片 Golang 模板中的结构中的特定字段

问题描述

我有这样的地方我发送到模板年数据(这是结构的切片)。如何AcaYear仅访问第二项(结构)的模板侧字段?整个第二项我可以访问为{{index . 1 }}. 我还可以在切片上进行范围并获取AcaYear所有项目的字段。但只需要AcaYear第二项的字段(结果应该是2021-2022)。

package main

import (
    "log"
    "os"
    "text/template"
)

type course struct {
    Number string
    Name   string
    Units  string
}

type semester struct {
    Term    string
    Courses []course
}

type year struct {
    AcaYear string
    Fall    semester
    Spring  semester
    Summer  semester
}

var tpl *template.Template

func init() {
    tpl = template.Must(template.ParseFiles("tpl.gohtml"))
}

func main() {
    years := []year{
        year{
            AcaYear: "2020-2021",
            Fall: semester{
                Term: "Fall",
                Courses: []course{
                    course{"CSCI-40", "Introduction to Programming in Go", "4"},
                    course{"CSCI-130", "Introduction to Web Programming with Go", "4"},
                    course{"CSCI-140", "Mobile Apps Using Go", "4"},
                },
            },
            Spring: semester{
                Term: "Spring",
                Courses: []course{
                    course{"CSCI-50", "Advanced Go", "5"},
                    course{"CSCI-190", "Advanced Web Programming with Go", "5"},
                    course{"CSCI-191", "Advanced Mobile Apps With Go", "5"},
                },
            },
        },
        year{
            AcaYear: "2021-2022",
            Fall: semester{
                Term: "Fall",
                Courses: []course{
                    course{"CSCI-40", "Introduction to Programming in Go", "4"},
                    course{"CSCI-130", "Introduction to Web Programming with Go", "4"},
                    course{"CSCI-140", "Mobile Apps Using Go", "4"},
                },
            },
            Spring: semester{
                Term: "Spring",
                Courses: []course{
                    course{"CSCI-50", "Advanced Go", "5"},
                    course{"CSCI-190", "Advanced Web Programming with Go", "5"},
                    course{"CSCI-191", "Advanced Mobile Apps With Go", "5"},
                },
            },
        },
    }

    err := tpl.Execute(os.Stdout, years)
    if err != nil {
        log.Fatalln(err)
    }
}

标签: gostructslicego-templates

解决方案


只需对index调用进行分组并将.AcaYear字段选择器应用于结果:

{{ (index . 1).AcaYear }}

这将输出(在Go Playground上尝试):

2021-2022

推荐阅读