【问题标题】:How to iterate nested struct in Go?如何在 Go 中迭代嵌套结构?
【发布时间】:2023-01-16 15:18:12
【问题描述】:

我收到错误消息“Range Can't iterate over....Curl brackets 中的数据列表”

我有以下结构

type FamilyMembers struct {
    XMLName      xml.Name `xml:"familyMember" json:"familyMember"`
    Text         string   `xml:",chardata" json:",chardata"`
    ResponseCode string   `xml:"responseCode"`
    Family     []struct {
        Text    string `xml:",chardata" json:",chardata"`
        Parents []struct {
            Text   string `xml:",chardata" json:",chardata"`
            Parent []struct {
                Text      string `xml:",chardata" json:",chardata"`
                FirstName string `xml:"firstName" json:"firstName"`
                MidleName string `xml:"midleName" json:"midleName"`
                SurName   string `xml:"surName" json:"surName"`
                Gender    string `xml:"gender" json:"gender"`
                DoB       string `xml:"doB" json:"doB"`
            } `xml:"parent" json:"parent"`
        } `xml:"parents" json:"parents"`

        Children []struct {
            Text  string `xml:",chardata" json:",chardata"`
            Child []struct {
                Text      string `xml:",chardata" json:",chardata"`
                FirstName string `xml:"firstName" json:"firstName"`
                MidleName string `xml:"midleName" json:"midleName"`
                SurName   string `xml:"surName" json:"surName"`
                Gender    string `xml:"gender" json:"gender"`
                DoB       string `xml:"doB" json:"doB"`
            } `xml:"child" json:"child"`
        } `xml:"children" json:"children"`

    } `xml:"family" json:"family"`
}

我想在一张表中列出所有数据,但我总是收到执行“正文”的错误消息 <.FamilyMembers >: range can't iterat over......然后它在控制台窗口中显示所有数据,并显示该错误下列的

{{ if .FamilyMembers }}
    <table >
      <thead>
         <tr>
           <th>Names</th>
           <th>Gender</th>
           <th>Born</th>
         </tr>
       </thead>
       <tbody>
          {{ range .FamilyMembers }}
          <tr>
             <td>{{ .FirstName }} {{ .MidleName }} {{ .SurName }}</td>
             <td>{{ .Gender }}</td>
             <td>{{ .DoB }}</td>
          </tr>
          {{ end }}
       </tbody>
   </table>
 {{ else }}
    <h5 class="mt-3 text-center">No family details</h5>
{{ end }}

当我尝试迭代时,我无法获得预期的结果

【问题讨论】:

  • 使用 range .FamilyMembers 其中 FamilyMembers 是一个结构会导致问题。 Nether Go 及其模板包都不支持对结构字段的迭代。您需要明确指定您要迭代的字段,例如 Family []struct 字段,以及其中的 Parents []structChildren []struct 字段。并且在引用这些字段时需要使用正确的选择器表达式。 Go 和它的模板库都不会为你做,你必须自己做。
  • 你应该带上Go Tour
  • @mkopriva 从技术上讲你的建议是正确的,但为什么在最后一句话中吹毛求疵?

标签: html json xml api go


【解决方案1】:

最后,我通过在迭代中执行以下操作得到了我想要显示的内容,

 {{ range $i, $a := .FamilyMembers.Family}}
  {{ range $j, $b := .Parents }}
       {{ range $k, $c := .Parent }}
            <tr>
                <td>{{ .FirstName }} {{ .MidleName }} {{ .SurName }}</td>
                <td>{{ .Gender }}</td>
                <td>{{ .DoB }}</td>
              </tr>
           {{ end }}
        {{ end }}
        {{ range $j, $b := .Children }}
             {{ range $k, $c := .Child }}
                  <tr>
                      <td>{{ .FirstName }} {{ .MidleName }} {{ .SurName }}</td>
                      <td>{{ .Gender }}</td>
                      <td>{{ .DoB }}</td>
                  </tr>
            {{ end }}
      {{ end }}
    {{ end }}

通过这样做有助于在所有内部结构(嵌套结构)中显示数据

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-02
    • 1970-01-01
    • 2016-04-15
    • 1970-01-01
    • 2015-07-18
    • 1970-01-01
    相关资源
    最近更新 更多