Go Embed简明教程

go语言程序都是编译成二进制可执行文件的,但是实际执行时除了需要可执行程序,还需要一些静态文件,比如html模板等,于是就有人想如果Go官方能内建支持就好了。2019末一个提案被提出 issue#35950,期望Go官方编译器支持嵌入静态文件。后来Russ Cox专门写了一个设计文档 Go command support for embedded static assets, 并最终实现了它。

  • 需要注意的这个功能在go 1.16beta之后才支持

  • 对于单个的文件,支持嵌入为字符串和 byte slice

  • 对于多个文件和文件夹,支持嵌入为新的文件系统FS

  • 比如导入 "embed"包,即使无显式的使用

    go:embed指令用来嵌入,必须紧跟着嵌入后的变量名

  • 只支持嵌入为string, byte slice和embed.FS三种类型,这三种类型的别名(alias)和命名类型(如type S string)都不可以

嵌入为字符串

假设有一个文件test.txt文件内容为hello world

如下代码编译之后s的值就变成了"hello world"

//go:embed test.txt
var s string

嵌入为byte slice

你还可以将文件的内容嵌入为slice of byte,也就是一个字节数组

//go:embed test.txt
var b []byte

嵌入为fs.FS

甚至你可以嵌入为一个文件系统,这种方式在嵌入多个文件的时候非常有用

支持嵌入多个文件如:

//go:embed test.txt hello.txt

支持指定文件夹如:

//go:embed file/file.txt

支持多行方式嵌入如:

//go:embed test.txt hello.txt
//go:embed file/file.txt
//go:embed test.txt hello.txt
//go:embed file/file.txt
var f embed.FS// 使用
// 嵌入为文件系统
data, _ :=  f.ReadFile("test.txt")
fmt.Println(string(data))
data, _ = f.ReadFile("hello.txt")
fmt.Println(string(data))

支持嵌入文件夹

//go:embed file
var d embed.FS

完整代码实现

package mainimport ("embed"_ "embed""fmt"
)//go:embed test.txt
var s string//go:embed test.txt
var b []byte//go:embed test.txt hello.txt
//go:embed file/file.txt
var f embed.FS//go:embed file
var d embed.FS//go:embed file/*.txt
var pre embed.FSfunc main() {// 直接嵌入fmt.Println(s)fmt.Println(b)// 嵌入为文件系统data, _ :=  f.ReadFile("test.txt")fmt.Println(string(data))data, _ = f.ReadFile("hello.txt")fmt.Println(string(data))// 嵌入的时候文件是啥,这里要对应指定为相同的文件路径data, _ = f.ReadFile("file/file.txt")fmt.Println(string(data))data, _ = d.ReadFile("file/file.txt")fmt.Println(string(data))data, _ = pre.ReadFile("file/name.txt")fmt.Println(string(data))
}

关注公众号一起学习新技术


Go Embed简明教程相关推荐

  1. Go embed 简明教程

    转载地址:Go embed 简明教程 Go编译的程序非常适合部署,如果没有通过CGO引用其它的库的话,我们一般编译出来的可执行二进制文件都是单个的文件,非常适合复制和部署.在实际使用中,除了二进制文件 ...

  2. Boost.Build 简明教程

    Boost.Build简明教程(译) Written by Boris Schäling. 历史: 2018-12-20 姚彧 第一版 目录 介绍 Introduction 生成过程 Build pr ...

  3. CGIC简明教程(转摘)

    CGIC简明教程 本系列的目的是演示如何使用C语言的CGI库"CGIC"完成Web开发的各种要求. *********************************     基础 ...

  4. kangle web server源代码安装简明教程

    kangle web server源代码安装简明教程 - kangle使用交流 - kangle软件 是一款高性能web服务器,反向代理服务器,提供虚拟主机管理系统及代理服务器,web服务器架设 - ...

  5. CentOs6.5中安装和配置vsftp简明教程

    这篇文章主要介绍了CentOs6.5中安装和配置vsftp简明教程,需要的朋友可以参考下 一.vsftp安装篇 复制代码代码如下: # 安装vsftpd yum -y install vsftpd # ...

  6. sqlalchemy mysql_SQLAlchemy简明教程

    原文可见:SQLAlchemy简明教程 - Jiajun的编程随想 SQLAlchemy是Python中常用的一个ORM,SQLAlchemy分成三部分: ORM,就是我们用类来表示数据库schema ...

  7. python tcp server_python scoket 编程 | tcp server client - 简明教程

    TCP 和 UDP 的区别 这两个协议都是传输层的协议,解决的问题,都是端口与端口的通信问题. TCP 每次建立通信,都需要三次握手,确定双方状态完毕,在发送数据.如果发送的数据出现了异常,TCP 也 ...

  8. 简明python教程pdf-python简明教程中文pdf

    python简明教程中文pdf电子书是作者通过自己对计算机语言多年来的研究和学习得出的学习经验,对于python新手来说非常有用,值得大家下载学习. python简明教程中文pdf文章目录 1.介绍 ...

  9. 简明python教程在线-Python简明教程

    Python简明教程在线阅读地址: https://bop.molun.net/ DocStrings 该文档字符串所约定的是一串多行字符串,其中第一行以某一大写字母开始,以句号结束.第二行为空行,后 ...

最新文章

  1. php 获取所有表,php – 获取所有插件的列表
  2. Linux网络编程 五种I/O 模式及select、epoll方法的理解
  3. 支付宝 .NET SDK 报错:RSA签名遭遇异常,请检查私钥格式是否正确。
  4. iPhone上运行Linux也要来了
  5. Python变量 - Python零基础入门教程
  6. python3 单例模式_当python,单例模式,多例模式,一次初始化遇到一起
  7. 数据结构—线性表及其实现方式
  8. MacbookPro添加硬盘内存
  9. android怎么用经纬度定位,android 依据经纬度定位所在城市
  10. 旧主机改NAS最终成功的过程
  11. 2017中国产品经理大会总结-我又开始相信可以改变世界了
  12. 死记3dmax快捷键有用么?
  13. Android仿qq登陆界面
  14. 人可以N次踏进同一条河流
  15. Python——爬取喜马拉雅音频(抖音最火翻唱)
  16. CSR8675模组,支持蓝牙APTX
  17. Kaldi简介【开源语音识别工具】
  18. DR和DIS的区别?
  19. 黑马电商后台管理系统用到的插件
  20. 85 R 银行信用卡风控评分数据分析

热门文章

  1. 当sql 没有足够的内存执行程序利用命令执行
  2. Problem B: 故障电灯(light)
  3. Android学习--持久化(三) SQLite LitePal
  4. 获取jar包内部的资源文件
  5. 2017 五月 UFED Series Releases 系列 6.2更新发布
  6. 虚拟机安装Ubuntu过程记录
  7. 第一阶段站立会议05
  8. web在线聊天系统。非ajax轮询
  9. Lecture Halls
  10. ubuntu12.10安装openssh-server与本身的软件冲突