You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Golang embed教程:如何嵌入包含图片的文件夹?

Go embed 嵌入文件夹后按文件名调用的实现方法

1. 先嵌入整个文件夹

使用//go:embed指令嵌入目标文件夹的所有内容,变量类型声明为embed.FS——它实现了标准库的fs.FS接口,后续可直接用这个变量操作嵌入的文件。

示例代码:

package main

import (
	"embed"
)

// 嵌入static文件夹下所有内容(包含子目录及层级文件)
// 路径为当前Go源文件的相对路径
//go:embed static/**
var resources embed.FS
  • 若仅需嵌入文件夹下的直接文件(不含子目录),可写成//go:embed static/*
  • 若要嵌入整个文件夹(含所有子目录和文件),用//go:embed static/**

2. 按文件名调用嵌入的文件

嵌入后,可通过embed.FS提供的方法(如Open、ReadFile)直接指定文件名调用,也能传给接受fs.FS参数的标准库函数(比如你用到的template.ParseFS)。

直接读取单个文件

import "log"

// 读取static/img/logo.png文件
content, err := resources.ReadFile("static/img/logo.png")
if err != nil {
	log.Fatal(err) // 处理文件不存在等错误
}
// 直接使用content字节数组

结合template.ParseFS使用

针对你给出的示例,注意template.ParseFS的第二个参数是可变glob模式参数,无需逗号分隔,直接传入多个匹配模式即可:

import "html/template"

// 解析static目录下所有png和jpg文件
tpl, err := template.ParseFS(resources, "static/*.png", "static/*.jpg")
if err != nil {
	log.Fatal(err)
}

// 若需匹配所有子目录下的png/jpg文件
tpl, err := template.ParseFS(resources, "static/**/*.png", "static/**/*.jpg")

关键注意点

  • 调用时的文件路径必须和嵌入时的路径对应,比如嵌入的是static/**,调用时就要写static/xxx/yyy.png,不能省略前缀static/
  • //go:embed指令必须紧挨着声明的embed.FS变量,中间不能有空行
  • 嵌入的路径必须是相对路径,不能用绝对路径

内容的提问来源于stack exchange,提问作者Skaz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 03:23:22