go:embed 的使用
简介
go:embed
是 go
1.16版本添加的新特性,可以在 go
生成的应用程序中嵌入静态文件(文件,文件夹)。部署的时候,直接扔一个二进制文件即可,不用再包含一些静态文件,考虑文件相对位置,因为它们已经被打包到生成的应用程序中了。
导入 embed
的 go
源文件可以使用 //go:embed
指令在编译时从包目录或子目录中将读取的内容转换成 string
, []byte
, 或者 embed.FS
类型的变量。
基本用法
目录层级:
下面用到的 hello.txt
的内容:
hello world!
转换成 string
import (_ "embed""fmt"
)//go:embed resources/hello.txt
var s stringfunc tEmbedString() {fmt.Println(s) // hello world!
}
转换成 []byte
import (_ "embed""fmt"
)//go:embed resources/hello.txt
var b []bytefunc tEmbedBytes() {fmt.Println(string(b)) // hello world!
}
转换成 embed.FS
string
和 []byte
都只能匹配一个文件,若需要匹配多个文件,需要使用 embed.FS
类型。
import ("embed""fmt"
)//go:embed resources/hello.txt
var f embed.FSfunc tEmbedFS() {data, err := f.ReadFile("resources/hello.txt")if err != nil {fmt.Println(err)return}fmt.Println(string(data)) // hello world!
}
embed FS
的语法规则
- 使用通配符
//go:embed image/*
- 多行定义
//go:embed
- 同行定义多资源文件,可直接引入文件夹(包含文件夹中的文件)
//go:embed image resources/test.html
例1:
import ("embed""fmt"
)//go:embed resources/hello.txt resources/index.gohtml
//go:embed resources/test.html resources/test.css
var multi embed.FSfunc tEmbedMulti() {dirEntry, err := multi.ReadDir("resources")if err != nil {fmt.Println(err)return}for _, entry := range dirEntry {fmt.Println(entry.Name())}
}
输出:
hello.txt
index.gohtml
test.css
test.html
例2:
import ("embed""fmt"
)// go:embed image/* 可替换下方的 go:embed
//go:embed image
var multi embed.FSfunc tEmbedMulti() {dirEntry, err := multi.ReadDir("image")if err != nil {fmt.Println(err)return}for _, entry := range dirEntry {fmt.Println(entry.Name())}
}
输出:
404.jpg
go.jpg
注意
- 使用
//go:embed
的时候,一定要引入embed
包,可以使用_
来引入(import _"embed"
),不然会报错://go:embed only allowed in Go files that import "embed"
//
和go:embed
之间不能有空格,// go:embed
这种写法是不能解析的。//go:embed
指令只能用在包一级的变量中,不能用在函数或方法级别。
参考
- 官方文档
- Go 语言 | 1.16 新增的embed在各流行Web框架中的应用
go:embed 的使用相关推荐
- 转: object 和embed 标签播放flash
一.介绍: 我们要在网页中正常显示flash内容,那么页面中必须要有指定flash路径的标 签.也就是OBJECT和 EMBED标签.OBJECT标签是用于windows平台的IE浏览器的,而EMBE ...
- HTML - embed 与 object 之争
2019独角兽企业重金招聘Python工程师标准>>> 在 HTML 里嵌入文本和图片之外的事物,就会用到嵌入标签,而嵌入标签在各浏览器之间的不统一,一直是让开发人员很头痛的问题.一 ...
- object标签与embad掉钱_使用object或embed标签来播放SWF文件
要在 Web 浏览器中显示 SWF 文件,HTML 文档必须使用具有正确参数的 object和 embed 标记. 注:可以通过在"发布设置"对话框中选择"HTML&qu ...
- mysql embed_html中object和embed标签的区别
♦object定义一个嵌入的对象.请使用此元素向您的 XHTML 页面添加多媒体.此元素允许您规定插入 HTML 文档中的对象的数据和参数,以及可用来显示和操作数据的代码. ♦ 标签用于包含对象,比如 ...
- html embed详解
html embed用法 Embed (一).基本语法: embed src=url 说明:embed可以用来插入各种多媒体,格式可以是 Midi.Wav.AIFF.AU.MP3等等, ...
- Embedding external files using [Embed] (转载:学习如何嵌入外部文件)
Embedding external files using [Embed] Posted on 2008-01-13 15:10 OldHawk 阅读(43) 评论(0) 编辑 收藏 网摘 所属分 ...
- html中embed标签的用法
(一).基本语法: embed src=url 说明:embed可以用来插入各种多媒体,格式可以是 Midi.Wav.AIFF.AU.MP3等等, Netscape及新版的IE 都支持.url为音频或 ...
- 用js改变embed标签的src值
今天有一需求,一堆视频,一堆链接,点击相关的链接,在本页打开相关的视频. 第一想法,很简单么,直接把src值改成点击的那个的href值就可以了. 试了下,发现这样不行,视频该怎么放还是怎么放,永远是刚 ...
- 前端学习笔记day01 html 标签之音频 embed+audio+video
1. embed标签 有时候视频很大,我们不直接从本地导入到html中,而是从优酷上直接复制html代码 即可: 2. 如果是一些小的视频文件 可以借助video标签 2.1 <video sr ...
- Flex embed XML and Icon
在平日的FLEX开发中,我们经常会遇到各种XML和Icon 内嵌,如何方便快速的管理这些文件成为提高开发效率的要点. 最近在做flex右键菜单时遇到的麻烦,下面将近期的经验总结在此,备忘. 首先是XM ...
最新文章
- 涨姿势,Java中New一个对象是个怎么样的过程?
- “懒惰”Linux 管理员的 10 个关键技巧
- 关于最近练习PYTHON代码的一点心得
- OpenCV3.1.0+VS2015开发环境配置
- Hibernate中Inverse和Cascade
- Python编程专属骚技巧4
- [转贴] PHP 编程标准
- java class实例化对象_使用Class对象实例化Java类型参数/ generic
- python结构_Python 项目的结构
- aes加密算法python语言实现_python-AES加密解密
- 发送的消息无法订阅_微信服务号和订阅号的如何选择
- OSEK间接网络管理(NM)
- arcface的前世今生
- Opencv之threshold
- 用c语言把图像转成jpg格式,图像格式转换之BMP格式转换为JPG格式(示例代码)
- win7升级win10系统
- Mac相关配置(本地host,端口被占用)
- 栈内存和堆内存的区别(一个笔试题的一部分)
- 北斗GPS同步时钟(授时系统)技术原理详解
- kubernetes学习笔记六:Volume
热门文章
- 桌面虚拟化正处于导入期
- 是妄言还是实话 云电脑将代替传统PC?
- 坚果云android功能,坚果云是什么有什么功能_坚果云相关功能作用介绍_3DM手游
- STM32的Flash地址是0x08000000,从0x00000000不可以?
- 精益创业实战 - 第5章 开始实验
- 来自和府捞面的信任,一起见证「客户的成功就是璞华的成功」
- 999. Available Captures for Rook
- 学习乔布斯的成功方法
- 操作无法完成 打印后台程序服务没有运行
- 操作系统之调度 (十) --- 处理机调度、高级调度、中级调度、低级调度...