go1.16新特性-embed包|Go主题月

简介: embed是go 1.16新引入的包,能够把静态文件和go文件一起编译成二进制文件。使我们能够更好的进行web的开发。没有这个包之前我们一般用go-bindata或go-bindata-assetfs先把静态文件编译成go文件,然后再用go命令编译成二进制文件,过程比较繁琐。现在官方提供了embed这个包后,可以直接通过一行命令(//go:embed)来导入静态文件,然后go命令编译时会把导入的静态文件也一起编译成二进制文件。

embed包简介


embedgo 1.16新引入的包,能够把静态文件和go文件一起编译成二进制文件。使我们能够更好的进行web的开发。没有这个包之前我们一般用go-bindatago-bindata-assetfs先把静态文件编译成go文件,然后再用go命令编译成二进制文件,过程比较繁琐。现在官方提供了embed这个包后,可以直接通过一行命令(//go:embed)来导入静态文件,然后go命令编译时会把导入的静态文件也一起编译成二进制文件。

导入静态文件方式


embed提供了3种导入静态文件的方式,分别可以导入为string字符串,或[]byte字节数组,或embed.FS文件系统。

  • 导入为string字符串
//go:embed text.txt
var content string
  • 导入为[]byte字节数组
//go:embed text.txt
var content []byte
  • 导入为embed.FS文件系统
//go:embed static
var static embed.FS

embed.FS文件系统


当导入静态文件为embed.FS文件系统时,go内部就会构建一个类似unix的层级文件系统,FS里的文件都是只读权限,所以可以安全的在多线程中访问它。FS也提供了三个方法供我们使用

  • Open(name)
  • ReadDir(name)
  • ReadFile(name)

Open

func (f FS) Open(name string) (fs.File, error)
  • 参数nameFS文件系统里的路径

这个方法根据提供的FS文件系统里的路径,然后返回File类型,接下来可以使用File提供的一些方法来访问文件

ReadDir

func (f FS) ReadDir(name string) ([]fs.DirEntry, error)
  • 参数nameFS文件系统里的路径 这个方法是读取一个文件夹,然后返回这个文件夹下所有的文件。

ReadFile

func (f FS) ReadFile(name string) ([]byte, error)
  • 参数nameFS文件系统里的路径 这个方法是根据提供的文件路径,直接读取文件里的内容,然后返回[]byte
目录
相关文章
|
24天前
|
Linux Go iOS开发
怎么禁用 vscode 中点击 go 包名时自动打开浏览器跳转到 pkg.go.dev
本文介绍了如何在 VSCode 中禁用点击 Go 包名时自动打开浏览器跳转到 pkg.go.dev 的功能。通过将 gopls 的 `ui.navigation.importShortcut` 设置为 "Definition",可以实现仅跳转到定义处而不打开链接。具体操作步骤包括:打开设置、搜索 gopls、编辑 settings.json 文件并保存更改,最后重启 VSCode 使设置生效。
46 7
怎么禁用 vscode 中点击 go 包名时自动打开浏览器跳转到 pkg.go.dev
|
2月前
|
Go 索引
go语言使用strings包
go语言使用strings包
29 3
|
2月前
|
编译器 Go 开发者
go语言中导入相关包
【11月更文挑战第1天】
35 3
|
2月前
|
并行计算 安全 Go
Go语言的并发特性
【10月更文挑战第26天】Go语言的并发特性
20 1
|
3月前
|
存储 Go 数据库
Go语言Context包源码学习
【10月更文挑战第21天】Go 语言中的 `context` 包用于在函数调用链中传递请求上下文信息,支持请求的取消、超时和截止时间管理。其核心接口 `Context` 定义了 `Deadline`、`Done`、`Err` 和 `Value` 方法,分别用于处理截止时间、取消信号、错误信息和键值对数据。包内提供了 `emptyCtx`、`cancelCtx`、`timerCtx` 和 `valueCtx` 四种实现类型,满足不同场景需求。示例代码展示了如何使用带有超时功能的上下文进行任务管理和取消。
|
3月前
|
安全 Java Go
Go语言的其他特性
【10月更文挑战第10天】Go语言的其他特性
|
4月前
|
存储 Go
Golang语言基于go module方式管理包(package)
这篇文章详细介绍了Golang语言中基于go module方式管理包(package)的方法,包括Go Modules的发展历史、go module的介绍、常用命令和操作步骤,并通过代码示例展示了如何初始化项目、引入第三方包、组织代码结构以及运行测试。
78 3
|
4月前
|
安全 Go C语言
Go常量的定义和使用const,const特性“隐式重复前一个表达式”,以及iota枚举常量的使用
这篇文章介绍了Go语言中使用`const`定义常量的方法,包括常量的特性“隐式重复前一个表达式”,以及如何使用`iota`实现枚举常量的功能。
|
5月前
|
Go 开发者
|
5月前
|
设计模式 编译器 程序员