embed
使用演示
embedstring[]byteFS
package main
import (
_ "embed"
"fmt"
)
// 下面一行像是注释的的内容是一条指令
// 它会将后面指定的文件的内容赋值给下面紧挨着声明的变量
//go:embed file1.txt
var s string
//go:embed subdir/file2.txt
var b []byte
func main() {
fmt.Println(s)
fmt.Println(string(b))
}
FS
package main
import (
"embed"
_ "embed"
"fmt"
)
// 下面是embed最好用的功能,把文件放到FS中
//go:embed file1.txt
//go:embed subdir/file2.txt
var f embed.FS
func main() {
data, _ := f.ReadFile("file1.txt")
fmt.Println(string(data))
data, _ = f.ReadFile("subdir/file2.txt")
fmt.Println(string(data))
}
//go:embed 指令
//go:embed
//go:embed file1.txt file2.txt
var f embed.FS
//go:embed file1.txt
//go:embed file2.txt
var f embed.FS
在WebServer中应用
embed比较常用的一个应用是在WebServer项目中打包网页静态资源文件,比如下面例子:
目录结构和网页文件内容:
WebServer代码:
package main
import (
"embed"
_ "embed"
"net/http"
)
//go:embed index.html assets
var content embed.FS
func main() {
// 使用embed.FS作为WebServer静态文件服务目录
fs := http.FileServer(http.FS(content))
http.Handle("/", http.StripPrefix("/", fs))
http.ListenAndServe(":80", nil)
}
总结
embed