embed简介
go embed 是 Go 1.16 中引入的特性,它允许将文件嵌入到 Go 代码中,以便在运行时访问这些文件。这对于将静态资源(如 HTML、CSS、JavaScript 文件)直接嵌入到 Go 二进制文件中,以及简化文件分发和部署非常有用。下面是关于 go embed 的详细介绍:
使用方式:
go embed 支持将文件嵌入到代码中的两种方式:
嵌入单个文件:
package main import (
_ "embed"
"fmt"
) //go:embed myfile.txt
var content string func main() {
fmt.Println(content)
}
嵌入多个文件:
package main import (
_ "embed"
"fmt"
) //go:embed file1.txt file2.txt
var content string func main() {
fmt.Println(content)
}
使用步骤:
- 导入
_ "embed"包,这样embed包就会被初始化。 - 在变量声明前使用
//go:embed注释,指定要嵌入的文件。你可以指定单个文件,也可以指定多个文件,用空格分隔。
访问嵌入文件:
使用 embed 包嵌入的文件是一个 string 、 []byte 或 embed.FS 类型的变量,你可以直接在代码中访问它们。在运行时,这些变量会被初始化为嵌入文件的内容。
用途:
- 将静态资源嵌入到 Go 二进制文件中,以便简化部署。
- 将配置文件或其他数据文件嵌入到应用程序中,无需外部文件依赖。
- 减少文件的分发和管理成本。
注意事项:
- 嵌入的文件内容会在编译时打包到二进制文件中,因此可能会增加二进制文件的大小。
- 嵌入的文件内容是只读的,无法在运行时修改。
- 嵌入文件的大小应适度,避免过大导致二进制文件过大。
//go:embed指令只能用于全局变量,不能用于函数内的局部变量。同时,它只能嵌入在 Go 源代码文件同一目录或子目录下的文件或目录。
总之,go embed 是一个强大的特性,使得在 Go 代码中嵌入文件变得更加方便和简单,特别是在需要将静态资源或配置文件包含在应用程序中时。
声明:本作品采用署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)进行许可,使用时请注明出处。
Author: mengbin
blog: mengbin
Github: mengbin92
cnblogs: 恋水无意
embed简介的更多相关文章
- 海量数据存储之Key-Value存储简介
Key-value存储简介 具备高可靠性及可扩展性的海量数据存储对互联网公司来说是一个巨大的挑战,传统的数据库往往很难满足该需求,并且很多时候对于特定的系统绝大部分的检索都是基于主键的的查询,在这种情 ...
- HTML个人简介
<!doctype html><html lang="en"> <head> <meta charset="UTF-8" ...
- ETCD 简介 + 使用
etcd简介 etcd是一个高可用的分布式键值(key-value)数据库.etcd内部采用raft协议作为一致性算法,etcd基于Go语言实现. etcd是一个服务发现系统,具备以下的特点: 简单: ...
- SVG脚本编程简介
本文主要介绍SVG的脚本编程,并分别给出放大.缩小,查询,鼠标事件等实例. 一. SVG简介 SVG,全称为Scalable Vector Graphics(可伸缩矢量图形).它是W3C制定的.用矢量 ...
- HTML简介及基本标记
HTML简介 HTML是Hypertext Markup Language的英文缩写,即超文本标记语言 使用 HTML 语言可以: 控制页面和内容的外观 插入的链接检索联机信息 创建表单,收集用户的信 ...
- angular原理及模块简介
Angular简介(大神可略过) Angular是一个强大的前端框架,其强大之处主要是可以把静态页面与动态数据绑定起来.平时我们看到的网页界面上面的数据都是固定,但如果我们要变化这些数据,例如我在一个 ...
- Otter入门简介
一.Otter简介 1.1 otter是什么? otter 译意: 水獭,数据搬运工 语言: 纯java开发 定位: 基于数据库增量日志解析,准实时同步到本机房或异地机房的mysql/oracle数 ...
- 14-4 ADO.NET简介
微软数据访问方式历史阶段 ①ODBC(Open Database Connectivity)是第一个使用SQL访问不同关系数据库的访问技术.使用ODBC应用程序能够通过单一的命令操作不同的数据库,而开 ...
- pybind11简介
python调用C/C++有不少的方法,如boost.python, swig, ctypes, pybind11等,这些方法有繁有简,而pybind11的优点是对C++ 11支持很好,API比较简单 ...
- ASP.NET Core 1.1 简介
ASP.NET Core 1.1 于2016年11月16日发布.这个版本包括许多伟大的新功能以及许多错误修复和一般的增强.这个版本包含了多个新的中间件组件.针对Windows的WebListener服 ...
随机推荐
- Django报错No module named django.core.urlresolvers
当需要测试django能否解析网站根路径的URL,并将其对应到我们编写的某个视图函数上时,使用下面的语句 from django.core.urlresolvers import resolve 执行 ...
- pycharm eslint should be on a new line
修改前: "vue/max-attributes-per-line": [2, { "singleline": 10, "multiline" ...
- Vue 路由router
简单案例: App.vue是核心组件,其中的<router-link>相当于a标签,to相当于href,export是暴露函数,这样某组件才能被其他组件识别到 代码: <templa ...
- js 之二 事件对象
事件对象 /当事件的响应函数被触发时,浏览器每次都会讲一个事件对象作为实参传递响应函数; 在事件对象中封装了当前事件相关的一切信息,比如:鼠标的,键盘的操作 // 当鼠标在areaDiv中移动时,在s ...
- GPT大模型下,如何实现网络自主防御
GPT大模型下,如何实现网络自主防御 本期解读专家 李智华 华为安全AI算法专家 近年来,随着GPT大模型的出现,安全领域的攻防对抗变得更加激烈.RSAC2023人工智能安全议题重点探讨了人工 ...
- node版本问题:Error: error:0308010C:digital envelope routines::unsupported
前言 出现这个错误是因为 node.js V17及以后版本中最近发布的OpenSSL3.0, 而OpenSSL3.0对允许算法和密钥大小增加了严格的限制,可能会对生态系统造成一些影响. 在node.j ...
- STL-deque(ACM)
1.两段都可以插入和删除(头 插入删除 尾 插入删除) 普通队列无法用pop_back()删除队列最后的元素,类似地,由于普通队列只能插入头删除,所以push().pop()无需带_front()._ ...
- 逍遥自在学C语言 | 指针的基础用法
前言 在C语言中,指针是一项重要的概念,它允许我们直接访问和操作内存地址. 可以说,指针是C语言一大优势.用得好,你写程序如同赵子龙百万军中取上将首级:用得不好,则各种问题层出不穷,有种双拳难敌四手的 ...
- 使用TensorFlow进行自动化测试与部署
目录 标题:<使用 TensorFlow 进行自动化测试与部署> 背景介绍: 随着人工智能和机器学习技术的快速发展,TensorFlow 成为了一个广泛应用的深度学习框架,被广泛用于构建神 ...
- 从Kafka中学习高性能系统如何设计
1 前言 相信各位小伙伴之前或多或少接触过消息队列,比较知名的包含Rocket MQ和Kafka,在京东内部使用的是自研的消息中间件JMQ,从JMQ2升级到JMQ4的也是带来了性能上的明显提升,并且J ...