
本文讲解如何在 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,替代 Markdown 作为最终交付物。Markdown 在信息密度、视觉清晰度和可分享性上已跟不上 AI 产物的丰富度,HTML 能同时承载排版、表格、SVG 等。
data := struct {
Images []string
}{
Images: fileNames,
}
tmpl.Execute(w, data)
对应 index.html 中使用标准模板语法遍历:
{{range .Images}}
@@##@@
{{end}}
⚠️ 注意事项:
- 路径安全性:确保目录路径可控,避免路径遍历攻击(如用户输入拼接路径);
- 静态资源路由:需额外配置 HTTP 路由提供 /my-template/imagesT/gallery/ 下的文件访问(例如 http.ServeFile 或 http.FileServer);
- 模板转义:{{.}} 在 src 属性中会自动 HTML 转义,但若文件名含特殊字符,建议再校验或清理;
- 性能考虑:频繁读目录建议缓存结果(如用 sync.Once 或 TTL 缓存),避免每次请求都 I/O。
综上,核心是「构造切片 → 安全传参 → 模板渲染」三步闭环,同时始终优先处理错误、保障健壮性。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!










