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 输出中找到。
浙公网安备 33010602011771号