Go HTML模板如何在单行打印两个结构体数组的值?
问题原因
当前代码先完整遍历数组A生成所有对应单元格,再遍历数组B生成所有单元格,导致所有A的内容集中在一行,所有B的内容集中在另一行,完全不符合每行对应一组A和B元素的需求。
解决方案
通过索引同步遍历两个数组,确保每次循环同时取出A和B对应位置的元素,生成一行完整的表格内容。结合模板语法(从代码判断为Go模板),利用range的索引特性,搭配index函数获取B数组对应位置的元素即可解决。
修改后的代码如下:
{{ range $index, $ADetail := $A }} <tr style='mso-yfti-irow:{{ add $index 2 }}'> <!-- 数组A对应的单元格 --> <td width=330 valign=top colspan=2 style='width:301.25pt;border-top:none;border-left:none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt; mso-border-top-alt:solid windowtext .5pt;mso-border-left-alt:solid windowtext .5pt;mso-border-alt:solid windowtext .5pt;padding:0in 5.4pt 0in 5.4pt'> <p class=MsoNormal style='line-height:13.5pt'> <span style='sans-serif;color:#7F7F7F'>{{ $ADetail.Name }}</span> </p> </td> <td width=330 valign=top colspan=2 style='width:301.25pt;border-top:none;border-left:none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt; mso-border-top-alt:solid windowtext .5pt;mso-border-left-alt:solid windowtext .5pt;mso-border-alt:solid windowtext .5pt;padding:0in 5.4pt 0in 5.4pt'> <p class=MsoNormal style='line-height:13.5pt'> <span style='sans-serif;color:#7F7F7F'>{{ $ADetail.Value }}</span> </p> </td> <!-- 数组B对应的单元格,通过索引获取对应元素 --> {{ with $BDetails := index $B $index }} <td width=330 colspan=3 valign=top style='width:301.25pt;border-top:none;border-left:none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt; mso-border-top-alt:solid windowtext .5pt;mso-border-left-alt:solid windowtext .5pt;mso-border-alt:solid windowtext .5pt;padding:0in 5.4pt 0in 5.4pt'> <p class=MsoNormal style='line-height:13.5pt'> <span style='sans-serif;color:#7F7F7F'>{{ $BDetails.IPAddress }}</span> </p> </td> <td width=330 valign=top style='width:301.25pt;border-top:none;border-left:none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt; mso-border-top-alt:solid windowtext .5pt;mso-border-left-alt:solid windowtext .5pt;mso-border-alt:solid windowtext .5pt;padding:0in 5.4pt 0in 5.4pt'> <p class=MsoNormal style='line-height:13.5pt'> <span style='sans-serif;color:#7F7F7F'>{{ $BDetails.Enabled }}</span> </p> </td> <td width=330 valign=top style='width:301.25pt;border-top:none;border-left:none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt; mso-border-top-alt:solid windowtext .5pt;mso-border-left-alt:solid windowtext .5pt;mso-border-alt:solid windowtext .5pt;padding:0in 5.4pt 0in 5.4pt'> <p class=MsoNormal style='line-height:13.5pt'> <span style='sans-serif;color:#7F7F7F'>{{ $BDetails.IPv6 }}</span> </p> </td> {{ end }} </tr> {{ end }}
关键说明
- 将
<tr>标签移入range循环内部,确保每次循环生成一行独立的表格内容 - 使用
range $index, $ADetail := $A同时获取数组A的索引和对应元素 - 通过
index $B $index精准获取数组B中对应索引的元素,并用with语句简化后续元素调用 - 修正了原代码中错误的
</o:p>闭合标签
内容的提问来源于stack exchange,提问作者Kashif Khan
相关产品推荐
相关产品推荐

