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 @   李若盛开  阅读(796)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」
历史上的今天:
2022-05-18 数据结构 - Linux中的僵尸进程和孤儿进程
点击右上角即可分享
微信分享提示