如何在Go中迭代嵌套的结构体?

huangapple go评论129阅读模式
英文:

How to iterate nested struct in Go?

问题

我收到一个错误消息,内容为“无法迭代范围...在花括号中的数据列表”。

我有以下结构体:

  1. type FamilyMembers struct {
  2. XMLName xml.Name `xml:"familyMember" json:"familyMember"`
  3. Text string `xml:",chardata" json:",chardata"`
  4. ResponseCode string `xml:"responseCode"`
  5. Family []struct {
  6. Text string `xml:",chardata" json:",chardata"`
  7. Parents []struct {
  8. Text string `xml:",chardata" json:",chardata"`
  9. Parent []struct {
  10. Text string `xml:",chardata" json:",chardata"`
  11. FirstName string `xml:"firstName" json:"firstName"`
  12. MidleName string `xml:"midleName" json:"midleName"`
  13. SurName string `xml:"surName" json:"surName"`
  14. Gender string `xml:"gender" json:"gender"`
  15. DoB string `xml:"doB" json:"doB"`
  16. } `xml:"parent" json:"parent"`
  17. } `xml:"parents" json:"parents"`
  18. Children []struct {
  19. Text string `xml:",chardata" json:",chardata"`
  20. Child []struct {
  21. Text string `xml:",chardata" json:",chardata"`
  22. FirstName string `xml:"firstName" json:"firstName"`
  23. MidleName string `xml:"midleName" json:"midleName"`
  24. SurName string `xml:"surName" json:"surName"`
  25. Gender string `xml:"gender" json:"gender"`
  26. DoB string `xml:"doB" json:"doB"`
  27. } `xml:"child" json:"child"`
  28. } `xml:"children" json:"children"`
  29. } `xml:"family" json:"family"`
  30. }

我想将所有数据列在一个表格中,但我总是收到错误消息,指示在执行“body"时无法迭代范围......然后在控制台窗口显示所有数据和错误,如下所示:

  1. {{ if .FamilyMembers }}
  2. <table>
  3. <thead>
  4. <tr>
  5. <th>Names</th>
  6. <th>Gender</th>
  7. <th>Born</th>
  8. </tr>
  9. </thead>
  10. <tbody>
  11. {{ range .FamilyMembers }}
  12. <tr>
  13. <td>{{ .FirstName }} {{ .MidleName }} {{ .SurName }}</td>
  14. <td>{{ .Gender }}</td>
  15. <td>{{ .DoB }}</td>
  16. </tr>
  17. {{ end }}
  18. </tbody>
  19. </table>
  20. {{ else }}
  21. <h5 class="mt-3 text-center">No family details</h5>
  22. {{ end }}

我无法获得预期的结果,因为我尝试迭代时遇到问题。

英文:

I get erro message that "Range Cann't iterate over....list of data in Curl brackets"

I have the following struct

  1. type FamilyMembers struct {
  2. XMLName xml.Name `xml:&quot;familyMember&quot; json:&quot;familyMember&quot;`
  3. Text string `xml:&quot;,chardata&quot; json:&quot;,chardata&quot;`
  4. ResponseCode string `xml:&quot;responseCode&quot;`
  5. Family []struct {
  6. Text string `xml:&quot;,chardata&quot; json:&quot;,chardata&quot;`
  7. Parents []struct {
  8. Text string `xml:&quot;,chardata&quot; json:&quot;,chardata&quot;`
  9. Parent []struct {
  10. Text string `xml:&quot;,chardata&quot; json:&quot;,chardata&quot;`
  11. FirstName string `xml:&quot;firstName&quot; json:&quot;firstName&quot;`
  12. MidleName string `xml:&quot;midleName&quot; json:&quot;midleName&quot;`
  13. SurName string `xml:&quot;surName&quot; json:&quot;surName&quot;`
  14. Gender string `xml:&quot;gender&quot; json:&quot;gender&quot;`
  15. DoB string `xml:&quot;doB&quot; json:&quot;doB&quot;`
  16. } `xml:&quot;parent&quot; json:&quot;parent&quot;`
  17. } `xml:&quot;parents&quot; json:&quot;parents&quot;`
  18. Children []struct {
  19. Text string `xml:&quot;,chardata&quot; json:&quot;,chardata&quot;`
  20. Child []struct {
  21. Text string `xml:&quot;,chardata&quot; json:&quot;,chardata&quot;`
  22. FirstName string `xml:&quot;firstName&quot; json:&quot;firstName&quot;`
  23. MidleName string `xml:&quot;midleName&quot; json:&quot;midleName&quot;`
  24. SurName string `xml:&quot;surName&quot; json:&quot;surName&quot;`
  25. Gender string `xml:&quot;gender&quot; json:&quot;gender&quot;`
  26. DoB string `xml:&quot;doB&quot; json:&quot;doB&quot;`
  27. } `xml:&quot;child&quot; json:&quot;child&quot;`
  28. } `xml:&quot;children&quot; json:&quot;children&quot;`
  29. } `xml:&quot;family&quot; json:&quot;family&quot;`
  30. }

I want to list all data in one table but i always get error message that excuting "body" ay <.FamilyMembers >: range cann't iterat over......then it dislay all data in console window with that error as following

  1. {{ if .FamilyMembers }}
  2. &lt;table &gt;
  3. &lt;thead&gt;
  4. &lt;tr&gt;
  5. &lt;th&gt;Names&lt;/th&gt;
  6. &lt;th&gt;Gender&lt;/th&gt;
  7. &lt;th&gt;Born&lt;/th&gt;
  8. &lt;/tr&gt;
  9. &lt;/thead&gt;
  10. &lt;tbody&gt;
  11. {{ range .FamilyMembers }}
  12. &lt;tr&gt;
  13. &lt;td&gt;{{ .FirstName }} {{ .MidleName }} {{ .SurName }}&lt;/td&gt;
  14. &lt;td&gt;{{ .Gender }}&lt;/td&gt;
  15. &lt;td&gt;{{ .DoB }}&lt;/td&gt;
  16. &lt;/tr&gt;
  17. {{ end }}
  18. &lt;/tbody&gt;
  19. &lt;/table&gt;
  20. {{ else }}
  21. &lt;h5 class=&quot;mt-3 text-center&quot;&gt;No family details&lt;/h5&gt;
  22. {{ end }}

i can not get the expected results as i i tried to iterate

答案1

得分: 2

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

  1. {{ range $i, $a := .FamilyMembers.Family}}
  2. {{ range $j, $b := .Parents }}
  3. {{ range $k, $c := .Parent }}
  4. <tr>
  5. <td>{{ .FirstName }} {{ .MidleName }} {{ .SurName }}</td>
  6. <td>{{ .Gender }}</td>
  7. <td>{{ .DoB }}</td>
  8. </tr>
  9. {{ end }}
  10. {{ end }}
  11. {{ range $j, $b := .Children }}
  12. {{ range $k, $c := .Child }}
  13. <tr>
  14. <td>{{ .FirstName }} {{ .MidleName }} {{ .SurName }}</td>
  15. <td>{{ .Gender }}</td>
  16. <td>{{ .DoB }}</td>
  17. </tr>
  18. {{ end }}
  19. {{ end }}
  20. {{ end }}

通过这样做,可以帮助显示所有内部结构(嵌套结构)中的数据。

英文:

Finally, I got what i wanted to display by doing the following on iteration,

  1. {{ range $i, $a := .FamilyMembers.Family}}
  2. {{ range $j, $b := .Parents }}
  3. {{ range $k, $c := .Parent }}
  4. &lt;tr&gt;
  5. &lt;td&gt;{{ .FirstName }} {{ .MidleName }} {{ .SurName }}&lt;/td&gt;
  6. &lt;td&gt;{{ .Gender }}&lt;/td&gt;
  7. &lt;td&gt;{{ .DoB }}&lt;/td&gt;
  8. &lt;/tr&gt;
  9. {{ end }}
  10. {{ end }}
  11. {{ range $j, $b := .Children }}
  12. {{ range $k, $c := .Child }}
  13. &lt;tr&gt;
  14. &lt;td&gt;{{ .FirstName }} {{ .MidleName }} {{ .SurName }}&lt;/td&gt;
  15. &lt;td&gt;{{ .Gender }}&lt;/td&gt;
  16. &lt;td&gt;{{ .DoB }}&lt;/td&gt;
  17. &lt;/tr&gt;
  18. {{ end }}
  19. {{ end }}
  20. {{ end }}

By doing that help to display data in all inner structs (nested structs)

huangapple
  • 本文由 发表于 2023年1月13日 17:10:59
  • 转载请务必保留本文链接:https://go.coder-hub.com/75107031.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定