当前位置: 首页 > news >正文

Go打包附件内容到执行文件

前言

如果我们的应用在启动的时候需要对数据库进行初始化(比如建表等), 可以通过读取.sql文件内容直接执行. 但是, 这样会带出一个问题:

  • 在发送可执行文件的时候, 需要连带着附件文件, 并且相对路径还不能出错. 这样太麻烦了
  • 有时我们并不希望附件的内容被使用者看到

处于种种原因, 我们不希望这部分额外的内容以附件的形式出现, 有没有什么办法能够将附件内容直接打包进可执行文件中呢?

打包方法

直接在文件中定义

最容易想到的, 就是直接在.go文件中定义字符串, 比如这样:

var text = `xxx`

如此处理必然是可以的, 但有些不方便.

  1. .sql文件可能是通过mysqldump导出的, 每次导出之后还需要将内容复制到.go文件中
  2. 在编辑.sql文件的时候, IDE会提供语法高亮及输入提示, 这些在字符串中都是没有的

通过工具转换

既然我们想要将内容直接放在文件中, 同时又想将内容打包到二进制中. 是否可以通过脚本处理呢? 脚本从附件中读取内容, 并写入到.go文件中.

有一个名为go-bindata 的工具, 做的就是这样的事情. 具体操作可自行搜索, 这里不做赘述.

但是这个工具在3年前就不再更新了, 为什么呢? 因为官方支持了.

go build

或许是因为这样的呼声太大, 在go 1.16版本开始, 官方增加了embed包对这种操作进行了支持, 可以在编译阶段直接将静态资源打包到二进制中.

其大致用法如下:

import "embed"// 将内容直接打包到二进制文件中
//go:embed test.txt
var test string//go:embed test.txt
var test1 []byte// 同时打包多个文件. 后接文件名或目录
//go:embed test.txt dir
// 作为文件
var test2 embed.FSfunc main() {// 输出文件内容println(test)println(string(test1))b, err := test2.ReadFile("test.txt")if err != nil {panic(err)}println(string(b))
}

其中string/[]byte用来打包单个文件, embed.FS可以打包一批文件. 使用也比较简单, 看下文档就行了.

至此, Go程序已经可以天然且方便的将资源文件进行打包了.

总结

OK, 现在已经完美解决了我们最开始的问题, 以后在项目中遇到类似的需求, 可以直接使用啦.

至于其他语言, 比如PHP/Python等, 本来就是一堆源文件, 不会打包成二进制, 应该也不会有这种需求吧.

相关文章:

Go打包附件内容到执行文件

前言 如果我们的应用在启动的时候需要对数据库进行初始化(比如建表等), 可以通过读取.sql文件内容直接执行. 但是, 这样会带出一个问题: 在发送可执行文件的时候, 需要连带着附件文件, 并且相对路径还不能出错. 这样太麻烦了有时我们并不希望附件的内容被使用者看到 处于种种…...

Spring的配置属性

介绍 以前都是用XML来设置属性值,SpringBoot的自动配置可以简化Spring应用的开发。配置属性只是配置Spring应用上下文中bean的属性而已,可以通过多个源来配置,包括JVM系统属性、环境变量等。 Spring中有两种不同(但相关)的配置 bean装配&…...

132.《render-props, Hoc,自定义hooks 详解》

文章目录render-props 模式props 方式children 方式(推荐)Hoc(高阶组件)使用步骤示例props 丢失解决方案自定义 hook1.只执行一次2.防抖hook高阶组件与自定义hook有什么区别相同点不同点React 中代码逻辑复用有三种方式,render-props, Hoc&am…...

通过Session共享数据验证码进行用户登录

通过Session共享数据验证码进行用户登录 需求: 访问带有验证码的登录页面login.jsp。用户输入用户名,密码以及验证码。 ①。如果用户名和密码输入有误,跳转登陆页面,提示:用户名或密码错误。 ②。如果验证码输入有误…...

C++STL详解(六)——stack和queue

文章目录空间适配器stackstack的定义方式stack的使用stack的模拟实现queuequeue的定义方式queue的使用queue的模拟实现空间适配器 适配器是一种设计模式(设计模式是一套被反复使用的,多数人知晓的,经过分类编目的,代码设计经验的…...

javaEE 初阶 — CSS 的 基本语法 与 引入方式

文章目录1. 基本语法规范2. 三种引入方式1. 基本语法规范 CSS 的基本语法规范是由 选择器 和 若干个声明 组成的。 选择器选中一个元素之后&#xff0c;这些属性都是针对于这个元素展开的。 先来看一个没有 CSS 的效果。 <body><p>这是一个段落</p> </bo…...

QEMU启动ARM32 Linux内核

目录前言前置知识ARM Versatile Express开发板简介ARM处理器家族简介安装qemu-system-arm安装交叉编译工具交叉编译ARM32 Linux内核交叉编译ARM32 Busybox使用busybox制作initramfs使用QEMU启动ARM32 Linux内核模拟vexpress-a9开发板模拟vexpress-a15开发板参考前言 本文介绍采…...

than的用法合集

首先需要了解一下than的词性&#xff0c;其有两个词性&#xff0c;一个是介词&#xff0c;一个是连词。 介词后面一定要接上名词性的词语&#xff0c;比如 i am taller then him 我比我的老师高 连词就比较自由&#xff0c;一般用来连接两个句子&#xff1b;但是使用than连词词…...

Unet 基于TCGA颅脑肿瘤MRI分割(高阶API分割模型)

目录 1. 介绍 2. dice 指标 3. resnet34 作为 backbone 的分割 4. deeplabv3 图像分割 4.1 问题 4.2 训练 4.3 预测 5. MAnet 图像分割...

[NIPS 2017] Improved Training of Wasserstein GANs (WGAN-GP)

Contents IntroductionDifficulties with weight constraintsCapacity underuseExploding and vanishing gradientsGradient penaltyReferencesIntroduction WGAN 增加了 GAN 模型训练的稳定性,但有时仍然会有生成质量不高或难以收敛的问题。作者发现上述问题经常是由 WGAN 中…...

力扣-每天的领导和合伙人

大家好&#xff0c;我是空空star&#xff0c;本篇带大家了解一道简单的力扣sql练习题。 文章目录前言一、题目&#xff1a;1693. 每天的领导和合伙人二、解题1.正确示范①提交SQL运行结果2.正确示范②提交SQL运行结果3.正确示范③提交SQL运行结果4.正确示范④提交SQL运行结果5.…...

考虑分配与合并,用GO实现GCMarkSweep

完整源码 ≧ω≦ 希望各位爸爸们&#xff0c;给我点赞吧 kokool/GCByGo: 《垃圾回收的算法与实现》有感而发 (github.com) 书接上文 我们之前不考虑分配与合并情况下&#xff0c;用GO实现GCMarkSweep&#xff08;标记清除算法&#xff09;&#xff0c;而这次我们继续回顾书本…...

浙江大学海宁IMBA提面经验分享

先来介绍一下我的个人情况&#xff1a;本人毕业于浙江一所普通的本科院校&#xff0c;毕业已经6年了&#xff0c;在一家互联网公司担任市场部经理。其实在参加浙大IMBA项目提面之前&#xff0c;我也参加了浙大MBA项目的提面&#xff0c;可惜只拿到了良好的结果&#xff0c;所以…...

Mybatis源码分析系列之第四篇:Mybatis中代理设计模型源码详解

一&#xff1a; 前言 我们尝试在前几篇文章的内容中串联起来&#xff0c;防止各位不知所云。 1&#xff1a;背景 我们基于Mybatis作为后台Orm框架进行编码的时候&#xff0c;有两种方式。 //编码方式1 UserDao userDao sqlSession.getMapper(UserDao.class); userDao.quer…...

JDBC的API详解

&#x1f34e;道阻且长&#xff0c;行则将至。&#x1f353; 目录 一、DriverManager 驱动管理类 1.注册驱动 2.获取数据库连接 二、Connection 数据库连接对象 1.获取执行对象 2.事务管理 三、Statement 1.执行DDL、DML语句 2.执行DQL语句 四、ResultSet 以JDBC快速…...

【深度强化学习】(4) Actor-Critic 模型解析,附Pytorch完整代码

大家好&#xff0c;今天和各位分享一下深度强化学习中的 Actor-Critic 演员评论家算法&#xff0c;Actor-Critic 算法是一种综合了策略迭代和价值迭代的集成算法。我将使用该模型结合 OpenAI 中的 Gym 环境完成一个小游戏&#xff0c;完整代码可以从我的 GitHub 中获得&#xf…...

SQL注入——文件上传

目录 一&#xff0c;mysql文件上传要点 二&#xff0c;文件上传指令 一句话木马 三&#xff0c;实例 1&#xff0c;判断注入方式 2&#xff0c;测试目标网站的闭合方式&#xff1a; 3&#xff0c;写入一句话木马 4&#xff0c;拿到控制权 一&#xff0c;mysql文件上传…...

【ESP32+freeRTOS学习笔记之“ESP32环境下使用freeRTOS的特性分析(新的开篇)”】

目录【ESP32freeRTOS学习笔记】系列新的开篇ESP-IDF对FreeRTOS的适配ESP-IDF环境中使用FreeRTOS的差异性简介关于FreeRTOS的配置关于ESP-IDF FreeRTOS Applications结语【ESP32freeRTOS学习笔记】系列新的开篇 ESP-IDF对FreeRTOS的适配 FreeRTOS是一个可以适用于多个不同MCU开…...

Uipath Excel 自动化系列18-RefreshPivotTable(刷新透视表)

活动描述 RefreshPivotTable(刷新透视表)&#xff1a;如果透视表的数据源发生变化&#xff0c;需使用刷新透视表活动&#xff0c;该活动需与Use Excel File 活动选择的 Excel 文件一起使用。 使用如下图&#xff1a; RefreshPivotTable(刷新透视表)属性 属性 作用 Display…...

设计模式之不变模式

在并行软件开发过程中&#xff0c;同步操作是必不可少的。当多线程对同一个对象进行读写操作时&#xff0c;为了保证对象数据的一致性和正确性&#xff0c;有必要对对象进行同步操作&#xff0c;但同步操作对系统性能有损耗。不变模式可以去除这些同步操作&#xff0c;提高并行…...

AdaptixC2实战(一)Hack Smart Security

前言: 本篇是AdaptixC2实战系列的第一篇,环境是 THM 上的 Hack Smart Security 靶机。我们将学习和使用AdaptixC2进行操作,基于AdaptixC2工具所提供的能力,探讨AdaptixC2的使用技巧及操作安全。 背景(纯虚构): 你的任务是渗透臭名昭著的 Hack Smarter APT 组织的服务器…...

EPLAN默认工具栏隐藏功能大揭秘:从复制格式到表格式编辑的实战技巧

EPLAN默认工具栏隐藏功能大揭秘&#xff1a;从复制格式到表格式编辑的实战技巧 在电气设计领域&#xff0c;EPLAN作为行业标杆软件&#xff0c;其默认工具栏中隐藏着许多未被充分发掘的效率利器。这些功能往往被常规操作所掩盖&#xff0c;却能在复杂项目设计中节省大量时间。…...

为什么92%的Python WASM尝试失败?——资深编译器工程师披露LLVM-WASI链路5大隐性断点

第一章&#xff1a;Python WASM部署的现状与认知误区WebAssembly&#xff08;WASM&#xff09;正迅速成为浏览器端高性能计算的新基石&#xff0c;但将 Python 部署至 WASM 环境仍存在显著的认知断层。许多开发者误以为“Python 代码可直接编译为 WASM”&#xff0c;实则 Pytho…...

Pixel Fashion Atelier保姆级教程:从INSERT COIN按钮到像素粒子物理引擎解析

Pixel Fashion Atelier保姆级教程&#xff1a;从INSERT COIN按钮到像素粒子物理引擎解析 1. 像素时装锻造坊简介 像素时装锻造坊是一款融合了复古游戏美学与现代AI技术的图像生成工具。它基于Stable Diffusion和Anything-v5模型构建&#xff0c;专为时尚设计和像素艺术创作而…...

Spring Boot项目实战:5步搞定sa-token与OAuth2.0的无缝整合(附完整代码)

Spring Boot项目实战&#xff1a;5步搞定sa-token与OAuth2.0的无缝整合&#xff08;附完整代码&#xff09; 在当今微服务架构盛行的时代&#xff0c;认证授权已成为系统设计中不可或缺的一环。对于Java开发者而言&#xff0c;如何在保持代码简洁的同时实现强大的权限控制&…...

如何突破数据标注瓶颈?Label Studio全攻略:从多模态标注到AI协作

如何突破数据标注瓶颈&#xff1f;Label Studio全攻略&#xff1a;从多模态标注到AI协作 【免费下载链接】label-studio Label Studio is a multi-type data labeling and annotation tool with standardized output format 项目地址: https://gitcode.com/GitHub_Trending/l…...

统计建模大赛的评分标准

2026年统计建模大赛正在进行中&#xff0c;相关文章&#xff1a; 统计建模大赛去哪找数据&#xff1f; 2026年统计建模大赛AI工具使用规范 2026年统计建模大赛选题思路——数字经济统计监测体系研究 我在公开课以及以前的文章中经常强调&#xff0c;数模竞赛不是考试&#…...

LyricsX:突破平台限制,重构macOS歌词体验的开源解决方案

LyricsX&#xff1a;突破平台限制&#xff0c;重构macOS歌词体验的开源解决方案 【免费下载链接】LyricsX &#x1f3b6; Ultimate lyrics app for macOS. 项目地址: https://gitcode.com/gh_mirrors/ly/LyricsX 在流媒体音乐蓬勃发展的今天&#xff0c;音乐爱好者们却常…...

s2-pro语音合成教程:通过API批量提交任务+异步结果回调实现

s2-pro语音合成教程&#xff1a;通过API批量提交任务异步结果回调实现 1. 平台简介 s2-pro是Fish Audio开源的专业级语音合成模型镜像&#xff0c;它能够将文本转换为自然流畅的语音。这个工具特别适合需要批量处理语音合成任务的场景&#xff0c;比如有声书制作、客服语音生…...

新手也能懂的RAIM算法:用Python复现GNSS完好性监测(附代码与数据)

新手也能懂的RAIM算法&#xff1a;用Python复现GNSS完好性监测&#xff08;附代码与数据&#xff09; 当你用手机导航时&#xff0c;是否想过这些定位信号有多可靠&#xff1f;RAIM&#xff08;Receiver Autonomous Integrity Monitoring&#xff09;算法就像GNSS系统的"质…...