脑洞golang embed 的使用场景
golang 的 embed 的功能真是一个很神奇的功能,它能把静态资源,直接在编译的时候,打包到最终的二进制程序中。
为什么会设计这么一个功能呢?我想和 golang 的崇尚简单的原则有关系吧。它希望的是一个二进制文件能走天下,那么如果你作为一个 web 服务器,还需要依赖一大堆的静态文件,终究不算是一人一天下,所以就提供了这么一种处理静态资源的办法。
golang 一旦提供了这种方式,可能会有哪些应用呢?我这里脑洞一下:
web 服务内嵌单页应用
目前的 web 应用很流行单页应用,基本上就一个 html+一个编译后的 js 就能搞定,那么我提供 web 服务器就直接通过 golang 编写,embed 方式将 html 和编译后的 js 内嵌到服务器中,那么就能很方便进行部署了。
app服务内嵌单页应用
同 web 服务一样,如果我使用 golang 写的是一个带有浏览器外框的 app 程序,内部使用 html+js进行渲染,那么岂不是这个服务就可以在手机/桌面端进行运行了?
可执行文件的版本管理
这下我们可以再仓库的根目录创建一个 version.txt, 里面填写上你的仓库的版本号,在项目中使用 embed 引入这个文件。如果你的项目是一个可执行文件,就能在执行的时候,直接显示出版本信息了。
可执行文件的git的commit显示
我们其实很希望知道我的这个可执行文件是对应 git 的哪个 commit,如果能将 .git 下的文件中的 commit 号直接 embed 到程序中就好了。
当然.git下的文件是不能直接 embed 的,但是这里提供了一种 generate+embed 的方式来实现:
Embedding Git Commit Information in Go Binaries
可执行文件的 readme
以前一个可执行文件在输入 help 的时候,需要显示一个信息内容,在 git 项目外也要有个 readme,其实两者都是对这个项目的帮助。那么现在,就能使用 embed 将两个合而为一了。
licence注入
我不确定golang 的二进制程序是否很容易被反编译,但是相较于简单的 licence 发放,将 licence 编译进入二进制程序已经是安全不少了。
我们要控制某个程序的发行,那么就在给用户编译二进制程序的时候,将对应的 licence 以 embed 的形式编译进入,然后在程序运行的时候,去远程或者本地使用非对称解密等方式来验证这个 licence 的合法性。
提高性能
我们可以将一些中间结果,比如 xxx 预计算模型啥的,以 embed 的形式内嵌进入程序。
程序运行的时候,就能将这些中间结构和预计算模型反序列化出来。
template文件进行embed
之前使用 golang 的 template 的时候,往往要创建一个很大的 template 的变量,而这个变量往往就是 html 或者 txt。现在就能独立将这个 html 或者 txt 放在 git 仓库中,在编译的时候 embed 进入。部署的时候直接使用了。
这样看代码的时候逻辑很清晰,运行的时候也很便捷。
参考
Go 语言 | 1.16 新增的embed在各流行Web框架中的应用
How can I embed hidden file in Go?
Embedding Git Commit Information in Go Binaries
脑洞golang embed 的使用场景的更多相关文章
- Golang适合高并发场景的原因分析
http://blog.csdn.NET/ghj1976/article/details/27996095 典型的两个现实案例: 我们先看两个用Go做消息推送的案例实际处理能力. 360消息推送的数据 ...
- Golang 效率初(粗)测
从接触 Golang 开始,断断续续已有差不多一年左右的时间了,都是业余自己学学看看,尚主要限于语法及语言特性,还没有用它写过实际的项目. 关于 Golang 的语法及语言特性,网上有很多资源可以学习 ...
- 分水岭 golang入坑系列
第三式开篇语有些负面, 所以这里就不贴了.有兴趣的自己可以去看看 https://andy-zhangtao.gitbooks.io/golang/content/ .怒发冲冠,意气之作.看完就完了, ...
- golang 项目实战简明指南
原文地址 开发环境搭建 golang 的开发环境搭建比较简单,由于是编译型语言,写好 golang 源码后,只需要执行 go build 就能将源码编译成对应平台(本文中默认为 linux)上的可执行 ...
- 关于协程:nodejs和golang协程的不同
nodejs和golang都是支持协程的,从表现上来看,nodejs对于协程的支持在于async/await,golang对协程的支持在于goroutine.关于协程的话题,简单来说,可以看作是非抢占 ...
- 秒懂 Golang 中的 条件变量(sync.Cond)
本篇文章面向的读者: 已经基本掌握Go中的 协程(goroutine),通道(channel),互斥锁(sync.Mutex),读写锁(sync.RWMutex) 这些知识.如果对这些还不太懂,可以先 ...
- golang中关于死锁的思考与学习
1.Golang中死锁的触发条件 1.1 书上关于死锁的四个必要条件的讲解 发生死锁时,线程永远不能完成,系统资源被阻碍使用,以致于阻止了其他作业开始执行.在讨论处理死锁问题的各种方法之前,我们首先深 ...
- 【Network】高性能 UDP 应该怎么做?
参考资料: EPOLL-UDP-GOLANG golang udp epoll - Google 搜索 go - golang: working with multiple client/server ...
- goroutine 和 线程的区别
我们在使用Go语言进行开发时,一般会使用goroutine来处理并发任务.那么大家有没有考虑过goroutine的实现机制是什么样的?很多同学会把goroutine与线程等同起来,但是实际上并不是这样 ...
- Go学习路径--相关基础
现在开始接触Go一段时间了,基本路径就是看基础学习材料,开始写项目,有问题找解决问题的方法.这里记录一下学习过程. go相关文章 Golang适合高并发场景的原因分析 go build 不同系统下的可 ...
随机推荐
- 【Azure 微服务】Service Fabric 部署时遇见了VMExtensionProvisioningError错误: Multiple VM extensions failed to be provisioned on the VM
问题描述 Deployment Azure Service Fabric 时,遇见了VMExtensionProvisioningError, 全文如下: Deployment Name: 385A ...
- Kubernetes:Pod 端口映射
本文为作者的 Kubernetes 系列电子书的一部分,电子书已经开源,欢迎关注,电子书浏览地址: https://k8s.whuanle.cn[适合国内访问] https://ek8s.whuanl ...
- Geospatial Data 在 Nebula Graph 中的实践
本文首发于 Nebula Graph Community 公众号 本文主要介绍了地理空间数据(Geospatial Data)以及它在 Nebula Graph 中的具体实践. Geospatial ...
- ArrayList学习总结
1.ArrayList简介[1] ArrayList实现了List接口.ArrayList的方法实现和vector相似,只是线程不安全的. ArrayList的 size.isEmpty.get.se ...
- Mysql常用存储引擎以及区别?
InnoDB:是Mysql的默认存储引擎,支持事务.外键.如果应用对事务的完整性有比较高的要求,在并发条件下要求数据的一致性,数据操作除了插入和查询之外,还包含很多的更新.删除操作,那么InnoDB存 ...
- rancher添加用户报错x509: certificate has expired Internal error occurred: failed calling webhook "rancherauth.cattle.io":
错误信息: Internal error occurred: failed calling webhook "rancherauth.cattle.io": Post https: ...
- Postman全网最详细使用教程
Postman全网最详细使用教程 欢迎关注博主公众号「Java大师」, 专注于分享Java领域干货文章, 关注回复「postman」, 获取postman插件和安装程序: http://www.jav ...
- 23_FFmpeg像素格式转换
简介 前面使用 SDL 显示了一张YUV图片以及YUV视频.接下来使用Qt中的QImage来实现一个简单的 YUV 播放器,查看QImage支持的像素格式,你会发现QImage仅支持显示RGB像素格式 ...
- 视野修炼第71期 | Rspack 家族新成员 Rsdoctor
欢迎来到第 71 期的[视野修炼 - 技术周刊],下面是本期的精选内容简 强烈推荐 Rspack 新成员:Rsdoctor Bun Shell DCloud:App跨平台框架对比2023版 开源工具& ...
- 3DCAT+上汽奥迪:打造新零售汽车配置器实时云渲染解决方案
在 5G.云计算等技术飞速发展的加持下,云渲染技术迎来了突飞猛进的发展.在这样的背景下,3DCAT应运而生,成为了业内知名的实时云渲染服务商之一. 交互式3D实时云看车作为云渲染技术的一种使用场景,也 ...