Golang - embed的使用

简介

在Go语言应用程序中包含任何文件、目录的内容,都打包到生成的Go语言应用程序中,部署时直接执行一个二进制文件就可以,不用再包含一些静态文件,因为它们已经被打包到生成的应用程序。

基本用法

通过//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这个包一定要导入,如果导入不使用的话,使用 _ 导入即可。

用处

  • 能够在命令行工具里嵌入WEB
  • go install 快速安装,启动web
  • 该web可以提供生成代码的平台
  • 该web可以提供例如json to struct等数据结构转换
  • 可大大提高Go的工具链能力
  • 能够将前端资源打包到一个二进制包里,方便部署和安装
  • 静态资源访问没有io操作,速度非常快

总结

1、go embed 只能读取到它所在.go文件所属的目录及其子目录的内容,无法读取上级目录

2、go embed 所生成的文件系统会连着原文件的目录结构一起存入,若需要将指定文件夹作为根目录使用,则可以使用Sub函数来生成一个子文件系统

posted @ 2023-05-18 22:51  李若盛开  阅读(865)  评论(0)    收藏  举报