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函数来生成一个子文件系统
分类:
Golang
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」
2022-05-18 数据结构 - Linux中的僵尸进程和孤儿进程