
本文讲解如何在 Go Web 服务中读取指定目录下的所有文件名,安全地收集为字符串切片,并通过 html/template 传递至 index.html 渲染展示。
本文讲解如何在 go web 服务中读取指定目录下的所有文件名,安全地收集为字符串切片,并通过 `html/template` 传递至 `index.html` 渲染展示。
在 Go 的 Web 开发中,常需将服务端动态数据(如文件列表)注入 HTML 模板。以读取 public/my-template/imagesT/gallery/ 目录下所有文件名为例,关键在于:正确构建可传递的切片变量,并妥善处理错误。
首先,避免忽略 ioutil.ReadDir(Go 1.16+ 推荐使用 os.ReadDir)返回的错误:
files, err := os.ReadDir("public/my-template/imagesT/gallery/")
if err != nil {
http.Error(w, "无法读取图片目录: "+err.Error(), http.StatusInternalServerError)
return
}接着,声明一个空字符串切片,遍历 DirEntry 列表并追加文件名:
var fileNames []string
for _, f := range files {
if !f.IsDir() { // 可选:仅包含普通文件,排除子目录
fileNames = append(fileNames, f.Name())
}
}然后,在 HTTP 处理函数中,将 fileNames 作为数据传入模板:
文章转信息图。将文章/笔记转化为手机可读的 HTML 信息图,自动匹配视觉风格。触发场景:文章转图、笔记转图、信息图、转小红书图、做张图、可视化这篇文章、文生图。
立即学习“前端免费学习笔记(深入)”;
data := struct {
Images []string
}{
Images: fileNames,
}
tmpl.Execute(w, data)对应 index.html 中使用标准模板语法遍历:
{{range .Images}}
<img src="/my-template/imagesT/gallery/{{.}}" alt="{{.}}" />
{{end}}⚠️ 注意事项:
- 路径安全性:确保目录路径可控,避免路径遍历攻击(如用户输入拼接路径);
- 静态资源路由:需额外配置 HTTP 路由提供 /my-template/imagesT/gallery/ 下的文件访问(例如 http.ServeFile 或 http.FileServer);
- 模板转义:{{.}} 在 src 属性中会自动 HTML 转义,但若文件名含特殊字符,建议再校验或清理;
- 性能考虑:频繁读目录建议缓存结果(如用 sync.Once 或 TTL 缓存),避免每次请求都 I/O。
综上,核心是「构造切片 → 安全传参 → 模板渲染」三步闭环,同时始终优先处理错误、保障健壮性。


















