点击上方蓝色“飞雪无情”关注我,设个星标,第一时间看文章
什么是 Go embed
在前几天刚发布的Golang 1.16版本中,新增了一个大家期待已久的特性//go:embed
,它的作用就是可以在Go语言应用程序中包含任何文件、目录的内容,也就是说我们可以把文件以及目录中的内容都打包到生成的Go语言应用程序中了,部署的时候,直接扔一个二进制文件就可以了,不用再包含一些静态文件了,因为它们已经被打包到生成的应用程序中了。
embed 的基本用法
Go embed的使用非常简单,通过//go:embed
指令即可,下面我通过一个例子说明:
package main
import (
"embed"
"fmt"
)
//go:embed fire
var s string
//go:embed fire
var b []byte
//go:embed templates
var fs embed.FS
func main() {
fmt.Println(s)
fmt.Println(string(b))
data, err := fs.ReadFile("templates/index.tmpl")
fmt.Println(err,string(data))
}
以上代码中,主要是通过//go:embed
指令达到读取文件内容的目的。//go:embed
指令后可以是一个文件,也可以是多个文件(空格隔开即可),也可以是一个目录。
其中string
和[]byte
类型都只能匹配一个文件,如果要匹配多个文件或者一个目录,就要使用embed.FS
类型。
特别注意:embed这个包一定要导入,如果导入不使用的话,使用 _ 导入即可。
embed 在http web中的使用
看到embed这个功能,你首先想到的应该是把以前开发Web应用时使用的静态文件、模板文件打包进应用程序中,所以接下来就来看下embed如何在http web中使用。
下面先来看一个使用http托管静态文件的示例
package main
import (
"embed"
"net/http"
)
//go:embed static
var static embed.FS
func main() {