嵌入静态文件
概述
参考:
embed 包可以让我们在编译时,将各种静态文件也编译进 Go 的二进制文件中。所以称之为 embed(嵌入)。
要使用 embed 包,除了导入以外,还需要在在声明变量时,添加注释 //go:ebed /PATH/TO/FILE
以使用 go:embed
指令,embed 包将会读取所有 .go 文件中的 go:embed
指令,并将其中的文件加载到变量中,该变量将会保存需要嵌入的静态文件。
注意,注释中 // 和后面的 go:ebed 中间不能有空格
go:ebed
指令有 3 种格式导入静态文件
一、将一个文件嵌入为字符格式
package main
import (
_ "embed"
"fmt"
)
//go:embed hello.txt
var s string
func main() {
fmt.Println(s)
}
二、将一个文件嵌入为 bytes 切片
package main
import (
_ "embed"
"fmt"
)
//go:embed hello.txt
var b []byte
func main() {
fmt.Println(string(b))
}
三、将一个或多个文件嵌入到文件系统中
package main
import (
"embed"
"fmt"
)
//go:embed hello.txt
var f embed.FS
func main() {
data, _ := f.ReadFile("hello.txt")
print(string(data))
}
静态文件的嵌入功能,最常用于 Web 程序,我们可以将前端的所有静态资源文件嵌入到编译好的二进制文件中,这样,不再需要 Nginx,只使用一个 Go 的二进制文件,即可随处运行~~比如:
package main
import (
"embed"
"net/http"
)
var (
//go:embed hello.txt
f embed.FS
)
func main() {
http.Handle("/", http.FileServer(http.FS(f)))
http.ListenAndServe(":8080", nil)
}
反馈
此页是否对你有帮助?
Glad to hear it! Please tell us how we can improve.
Sorry to hear that. Please tell us how we can improve.