golang embed 含义及用法
golang embed 包的主要功能是在运行时提供对嵌入到 Go 程序中的文件的访问。
使用 embed
包,Go源文件可以通过使用 //go:embed
指令来将文件的内容初始化为字符串、字节切片或 FS 类型。
这样可以在运行时直接访问这些文件的内容。
以下是使用 embed
包的三个示例:
1. 将一个文件嵌入为字符串:
import _ "embed" //go:embed hello.txt var s string print(s)
2. 将一个文件嵌入为字节切片:
import _ "embed" //go:embed hello.txt var b []byte print(string(b))
3. 将一个或多个文件嵌入为文件系统:
import "embed" //go:embed hello.txt var f embed.FS data, _ := f.ReadFile("hello.txt") print(string(data))
package server import "embed" // content holds our static web server content. //go:embed image/* template/* //go:embed html/index.html var content embed.FS
//go:embed
指令用于指定要嵌入的文件,使用路径匹配模式。
该指令必须位于变量声明的前面,并且只能在变量声明前存在空行或以 //
开头的行注释。
变量的类型可以是字符串类型、字节切片类型 或 FS 类型(或 FS 类型的别名)。
如果指定的模式匹配目录,则该目录下的所有文件(除了以 .
或 _
开头的文件)都会被嵌入到变量中。
如果模式以 all:
前缀开头,则会包含以 .
或 _
开头的文件。
对于字符串 和 字节切片类型的变量,//go:embed
指令只能指定一个模式,并且该模式只能匹配一个文件。变量将被初始化为该文件的内容。
embed
包中的 FS 类型可以用于嵌入文件树,例如静态 web 服务器内容的目录。
FS 类型实现了 io/fs
包中的 FS 接口,因此可以与任何支持文件系统的包一起使用,如 net/http
、text/template
和 html/template
。
为了支持分析 Go 包的工具,//go:embed
指令中指定的模式可以在 go list
输出中找到。