Go embed
它的作用就是可以在Go语言应用程序中包含任何文件、目录的内容, 也就是说我们可以把文件以及目录中的内容都打包到生成的Go语言应用程序中了,部署的时候,直接扔一个二进制文件就可以了,不用再包含一些静态文件了,因为它们已经被打包到生成的应用程序中了。
embed 的基本用法
Go embed的使用非常简单,通过//go:embed指令即可
实践参考例子
文件目录参考
资源目录必须和引用embed的文件目录平齐或者为子目录,不能在上级目录,其中web为静态资源目录,commentWeb.go为引用embed的go文件
实践代码
这段代码是一个简单的Go语言程序,用于启动一个基本的Web服务器,并将静态文件嵌入到可执行文件中。
//go:embed web/*
var WebFlies embed.FS
func StartWebServer() {
// 设置静态文件服务
web, _ := fs.Sub(WebFlies, "web")
fs := http.FileServer(http.FS(web))
http.Handle("/", http.StripPrefix("/", fs))
// 启动服务器
log.Println("Starting web server on :" + config.LoadConfig().WebPort)
if err := http.ListenAndServe(":"+config.LoadConfig().WebPort, nil); err != nil {
log.Fatalf("Failed to start web server: %v", err)
}
}
具体解释
//go:embed web/*
var WebFlies embed.FS
//go:embed web/*
: 这是一个编译指令,表示将web/
目录下的所有文件嵌入到可执行文件中。var WebFlies embed.FS
: 定义了一个变量WebFiles
,类型为embed.FS
,用于存储嵌入的文件系统。
func StartWebServer() {}
func StartWebServer()
: 定义了一个函数StartWebServer
,该函数用于启动Web服务器。
// 设置静态文件服务
// 设置静态文件服务
: 这是一个注释,用于说明下面代码的作用,即设置静态文件服务。
web, _ := fs.Sub(WebFlies, "web")
web, _ := fs.Sub(WebFlies, "web")
: 这一行代码用于获取嵌入文件系统中web/
目录的子文件系统。fs.Sub
函数接收两个参数,第一个参数是父文件系统,即WebFiles
,第二个参数是要获取的子目录名。
fs := http.FileServer(http.FS(web))
fs := http.FileServer(http.FS(web))
: 创建了一个http.FileServer
对象,用于提供静态文件服务。http.FS
函数将web
转换为http.FileSystem
类型,然后传递给http.FileServer
。
http.Handle("/", http.StripPrefix("/", fs))
http.Handle("/", http.StripPrefix("/", fs))
: 将静态文件服务fs
绑定到根路径/
上。http.StripPrefix("/", fs)
用于移除URL前缀/
,以便直接访问静态文件。
// 启动服务器
log.Println("Starting web server on :" + config.LoadConfig().WebPort)
// 启动服务器
: 这是一个注释,用于说明下面代码的作用,即启动服务器。log.Println("Starting web server on :" + config.LoadConfig().WebPort)
: 打印日志消息,显示将要启动的Web服务器的端口号。
if err := http.ListenAndServe(":"+config.LoadConfig().WebPort, nil); err != nil {
log.Fatalf("Failed to start web server: %v", err)
}
http.ListenAndServe(":"+config.LoadConfig().WebPort, nil)
: 启动Web服务器并监听指定端口,使用默认的路由处理器(nil
)。config.LoadConfig().WebPort
: 通过config.LoadConfig().WebPort
获取配置文件中的Web服务器端口号。if err := ...
: 检查启动Web服务器时是否发生了错误,如果有错误则记录错误信息并终止程序运行。