目的
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