【发布时间】: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 []struct和Children []struct字段。并且在引用这些字段时需要使用正确的选择器表达式。 Go 和它的模板库都不会为你做,你必须自己做。 -
你应该带上Go Tour。
-
@mkopriva 从技术上讲你的建议是正确的,但为什么在最后一句话中吹毛求疵?