简介

go:embedgo 1.16版本添加的新特性,可以在 go 生成的应用程序中嵌入静态文件(文件,文件夹)。部署的时候,直接扔一个二进制文件即可,不用再包含一些静态文件,考虑文件相对位置,因为它们已经被打包到生成的应用程序中了。

导入 embedgo 源文件可以使用 //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 的使用相关推荐

  1. 转: object 和embed 标签播放flash

    一.介绍: 我们要在网页中正常显示flash内容,那么页面中必须要有指定flash路径的标 签.也就是OBJECT和 EMBED标签.OBJECT标签是用于windows平台的IE浏览器的,而EMBE ...

  2. HTML - embed 与 object 之争

    2019独角兽企业重金招聘Python工程师标准>>> 在 HTML 里嵌入文本和图片之外的事物,就会用到嵌入标签,而嵌入标签在各浏览器之间的不统一,一直是让开发人员很头痛的问题.一 ...

  3. object标签与embad掉钱_使用object或embed标签来播放SWF文件

    要在 Web 浏览器中显示 SWF 文件,HTML 文档必须使用具有正确参数的 object和 embed 标记. 注:可以通过在"发布设置"对话框中选择"HTML&qu ...

  4. mysql embed_html中object和embed标签的区别

    ♦object定义一个嵌入的对象.请使用此元素向您的 XHTML 页面添加多媒体.此元素允许您规定插入 HTML 文档中的对象的数据和参数,以及可用来显示和操作数据的代码. ♦ 标签用于包含对象,比如 ...

  5. html embed详解

    html embed用法 Embed  (一).基本语法:  embed src=url  说明:embed可以用来插入各种多媒体,格式可以是 Midi.Wav.AIFF.AU.MP3等等,      ...

  6. Embedding external files using [Embed] (转载:学习如何嵌入外部文件)

    Embedding external files using [Embed] Posted on 2008-01-13 15:10 OldHawk 阅读(43) 评论(0)  编辑 收藏 网摘 所属分 ...

  7. html中embed标签的用法

    (一).基本语法: embed src=url 说明:embed可以用来插入各种多媒体,格式可以是 Midi.Wav.AIFF.AU.MP3等等, Netscape及新版的IE 都支持.url为音频或 ...

  8. 用js改变embed标签的src值

    今天有一需求,一堆视频,一堆链接,点击相关的链接,在本页打开相关的视频. 第一想法,很简单么,直接把src值改成点击的那个的href值就可以了. 试了下,发现这样不行,视频该怎么放还是怎么放,永远是刚 ...

  9. 前端学习笔记day01 html 标签之音频 embed+audio+video

    1. embed标签 有时候视频很大,我们不直接从本地导入到html中,而是从优酷上直接复制html代码 即可: 2. 如果是一些小的视频文件 可以借助video标签 2.1 <video sr ...

  10. Flex embed XML and Icon

    在平日的FLEX开发中,我们经常会遇到各种XML和Icon 内嵌,如何方便快速的管理这些文件成为提高开发效率的要点. 最近在做flex右键菜单时遇到的麻烦,下面将近期的经验总结在此,备忘. 首先是XM ...

最新文章

  1. 涨姿势,Java中New一个对象是个怎么样的过程?
  2. “懒惰”Linux 管理员的 10 个关键技巧
  3. 关于最近练习PYTHON代码的一点心得
  4. OpenCV3.1.0+VS2015开发环境配置
  5. Hibernate中Inverse和Cascade
  6. Python编程专属骚技巧4
  7. [转贴] PHP 编程标准
  8. java class实例化对象_使用Class对象实例化Java类型参数/ generic
  9. python结构_Python 项目的结构
  10. aes加密算法python语言实现_python-AES加密解密
  11. 发送的消息无法订阅_微信服务号和订阅号的如何选择
  12. OSEK间接网络管理(NM)
  13. arcface的前世今生
  14. Opencv之threshold
  15. 用c语言把图像转成jpg格式,图像格式转换之BMP格式转换为JPG格式(示例代码)
  16. win7升级win10系统
  17. Mac相关配置(本地host,端口被占用)
  18. 栈内存和堆内存的区别(一个笔试题的一部分)
  19. 北斗GPS同步时钟(授时系统)技术原理详解
  20. kubernetes学习笔记六:Volume

热门文章

  1. 桌面虚拟化正处于导入期
  2. 是妄言还是实话 云电脑将代替传统PC?
  3. 坚果云android功能,坚果云是什么有什么功能_坚果云相关功能作用介绍_3DM手游
  4. STM32的Flash地址是0x08000000,从0x00000000不可以?
  5. 精益创业实战 - 第5章 开始实验
  6. 来自和府捞面的信任,一起见证「客户的成功就是璞华的成功」
  7. 999. Available Captures for Rook
  8. 学习乔布斯的成功方法
  9. 操作无法完成 打印后台程序服务没有运行
  10. 操作系统之调度 (十) --- 处理机调度、高级调度、中级调度、低级调度...