首页 > 编程语言 >Go模板中遍历切片获取索引的正确方法

Go模板中遍历切片获取索引的正确方法

来源:互联网 2026-07-12 08:01:01

在GoHTML模板中,使用{{range}}遍历切片时,通过$index,$value:=.Slice可同时获取索引和值,索引从0开始。变量名必须以$开头,两个变量缺一不可。若需从1开始,可注册add1函数实现。注意作用域内访问外层变量需用$符号。

在Go HTML模板中,使用`{{range}}`语法遍历切片时,可通过`$index, $value := .Slice`形式同时获取当前元素索引和值,索引从0开始,无需额外函数或上下文变量。

带索引的range遍历

在Go的html/template包中,{{range}}指令原生支持带索引的遍历。开发者只需在{{range}}后声明两个变量:第一个为索引(通常命名为$index),第二个为当前元素(例如$article),并通过:=绑定数据源,即可在模板内同时获取索引和值。

以下是一个典型用法示例:

长期稳定更新的攒劲资源: >>>点此立即查看<<<

{{ range $index, $article := $.Articles }}
  
#{{ add1 $index }}

{{ $article.Title }}

{{ end }}

注意事项

  • 索引变量名必须以$开头,例如$index;若写成index,模板会将其视为普通文本,而非变量声明。
  • 如果只声明一个变量(如{{range $article := .Articles}}),则该变量代表元素值,无法访问索引。需要索引时,必须同时声明两个变量。
  • $index为整数类型,可直接用于条件判断。例如{{if eq $index 0}}可标记第一个元素,或将其传递给自定义函数。

序号从1开始

若希望序号从1开始(而非默认的0),需在模板的函数映射表中注册一个add1函数,例如:

"add1": func(i int) int { return i + 1 }

然后在模板中使用{{ add1 $index }},序号便依次变为1、2、3。

作用域与外部变量

{{range}}作用域内,如果需访问外层作用域的.,必须显式使用$.FieldName(如$.PageTitle)。否则由于作用域切换,外层变量可能无法访问。

嵌套range

带索引的{{range}}可以嵌套使用。例如遍历二维切片或map的键值对:

{{range $i, $row := .Grid}}{{range $j, $cell := $row}}...{{end}}{{end}}

这种写法可轻松实现灵活的表格或网格渲染。

实用场景

掌握这一模式后,开发者可在模板中高效实现序号列表、首项高亮、奇偶行样式、分页导航等常见需求,无需后端预处理索引字段,直接在前端模板中完成。

侠游戏发布此文仅为了传递信息,不代表侠游戏网站认同其观点或证实其描述

热游推荐

更多
湘ICP备14008430号-1 湘公网安备 43070302000280号
All Rights Reserved
本站为非盈利网站,不接受任何广告。本站所有软件,都由网友
上传,如有侵犯你的版权,请发邮件给xiayx666@163.com
抵制不良色情、反动、暴力游戏。注意自我保护,谨防受骗上当。
适度游戏益脑,沉迷游戏伤身。合理安排时间,享受健康生活。