如何在不使用额外模板函数的前提下在Go template中拼接字符串
Go模板字符串切片按
/拼接的最优实现方案 方案1:注册strings.Join到模板函数(最推荐)
这是性能最高、写法最简洁的方案,只需要在Go代码初始化模板时注册标准库的字符串拼接函数即可:
Go端注册函数示例:
import "strings" // 初始化模板时注册函数 tpl := template.New("").Funcs(template.FuncMap{ "join": strings.Join, })
模板中直接调用即可,自动适配空切片、单元素切片等所有边界情况:
{{ join .x "/" }}
方案2:纯原生模板语法实现(无需修改Go代码)
如果你没有权限修改Go侧的模板函数注册逻辑,只使用Go模板自带语法实现的话,可以通过判断range索引避免多余的分隔符,无需事后截断字符串:
{{ range $idx, $item := .x }} {{- if $idx }}/{{ end -}} {{- $item -}} {{ end }}
语法中的-用于去掉模板渲染时的多余空白,可根据你的格式需求自行调整。
注意:你原来的写法存在严重的边界问题:如果
.x是空切片的话,最终得到的res是空字符串,执行res[:len(res)-1]会直接触发数组越界panic,生产环境使用风险很高。
内容的提问来源于stack exchange,提问作者wymli
相关产品推荐
相关产品推荐

