go压缩的使用
基础:使用go创建一个zip
func base(path string) {// 创建 zip 文件zipFile, err := os.Create("test.zip")if err != nil {panic(err)}defer zipFile.Close()// 创建一个新的 *Writer 对象zipWriter := zip.NewWriter(zipFile)defer zipWriter.Close()// 创建一个压缩包中的文件fileWriter, err := zipWriter.Create("这个地方填文件的新名字.jpg")if err != nil {panic(err)}// 打开要压缩的文件f, err := os.Open(path)if err != nil {panic(err)}defer f.Close()// 将文件内容拷贝到 ZIP 文件中if _, err := io.Copy(fileWriter, f); err != nil {panic(err)}// zipWriter.Close() 在 defer 中已经处理println("ZIP 文件创建成功!")
}
这样可以得到一个path的压缩文件,打开如下:
想要得到一个具备层级的压缩文件,如下图:

需要先做的是创建所需的层级。
即,如果想要在压缩文件中呈现:
压缩文件:北京/朝阳区/美食地图.jpg
需要先创建 “北京/朝阳区/” 这个路径,而创建文件夹和创建文件的方式是一样的:
// 创建一个路径_, err = zipWriter.Create("北京/朝阳区")if err != nil {panic(err)}
合起来就是:
func pathZip(path string) {// 创建 zip 文件zipFile, err := os.Create("test.zip")if err != nil {panic(err)}defer zipFile.Close()// 创建一个新的 *Writer 对象zipWriter := zip.NewWriter(zipFile)defer zipWriter.Close()// 创建一个路径_, err = zipWriter.Create("北京/朝阳区")if err != nil {panic(err)}// 创建一个压缩包中的文件fileWriter, err := zipWriter.Create("北京/朝阳区/美食地图.jpg")if err != nil {panic(err)}// 打开要压缩的文件f, err := os.Open(path)if err != nil {panic(err)}defer f.Close()// 将文件内容拷贝到 ZIP 文件中if _, err := io.Copy(fileWriter, f); err != nil {panic(err)}// zipWriter.Close() 在 defer 中已经处理println("ZIP 文件创建成功!")
}
注意,顺序不可以颠倒,要先创建路径,然后创建文件,然后再把文件拷贝到压缩包中。
如果要拷贝另一个文件,需要再创建一个文件且拷贝后才可以,不然之前的文件关闭了就无法再复制进去了。
下面这样是不可行的:
// 创建一个压缩包中的文件fileWriter, err := zipWriter.Create("美食地图.jpg")if err != nil {panic(err)}// 创建一个压缩包中的文件fileWriter2, err := zipWriter.Create("美食地图2.jpg")if err != nil {panic(err)}// 打开要压缩的文件f, err := os.Open(path)if err != nil {panic(err)}defer f.Close()// 将文件内容拷贝到 ZIP 文件中if _, err := io.Copy(fileWriter, f); err != nil {panic(err)}// 将文件内容拷贝到 ZIP 文件中if _, err := io.Copy(fileWriter2, f); err != nil {panic(err)}
下面这样是可行的:
// 创建一个压缩包中的文件fileWriter, err := zipWriter.Create("美食地图.jpg")if err != nil {panic(err)}// 打开要压缩的文件f, err := os.Open(path)if err != nil {panic(err)}defer f.Close()// 将文件内容拷贝到 ZIP 文件中if _, err := io.Copy(fileWriter, f); err != nil {panic(err)}// 创建一个压缩包中的文件fileWriter2, err := zipWriter.Create("美食地图2.jpg")if err != nil {panic(err)}// 将文件内容拷贝到 ZIP 文件中if _, err := io.Copy(fileWriter2, f); err != nil {panic(err)}
成功了:
相关文章:
go压缩的使用
基础:使用go创建一个zip func base(path string) {// 创建 zip 文件zipFile, err : os.Create("test.zip")if err ! nil {panic(err)}defer zipFile.Close()// 创建一个新的 *Writer 对象zipWriter : zip.NewWriter(zipFile)defer zipWriter.Close()// 创…...
一图解千言,了解常见的流程图类型及其作用
在企业管理、软件研发过程中,经常会需要进行各种业务流程梳理,而流程图就是梳理业务时必要的手段,同时也是梳理的产出。但在不同的情况下适用的流程图又不尽相同。 本文我们就一起来总结一下8 种最常见的流程图类型 数据流程图 数据流程图&…...
【微信小程序_19_自定义组件(1)】
摘要:本文主要介绍了小程序开发中自定义组件的相关知识。包括组件的创建与引用,可在项目根目录创建组件文件夹,生成相应文件,并根据使用频率选择全局或局部引用。还阐述了组件和页面的区别,如组件的.json 文件需声明 “component: true”,.js 文件调用 Component () 函数…...
标准版admin后台页面添加及开发操作流程及注意事项
基础介绍 CRMEB后台管理是基于vue2技术栈进行开发搭建的 Vue Router 使用的是v3版本,mode为history模式 如需修改 mode 请在src/setting.js中修改routerMode 新建页面 新建路由 根据目录结构,需要在src/router/modules中对应模块中,添加对…...
‘perl‘ 不是内部或外部命令,也不是可运行的程序 或批处理文件。
‘perl’ 不是内部或外部命令,也不是可运行的程序 或批处理文件。 明明已经根据教程安装了perl环境,但是在cmd中依赖报该错误,本章教程提供解决办法。 一、激活perl环境 state shell ActiveState-Perl-5.36.0此时输入perl -v 是可以直接输出perl版本号的。 二、找到perl的执…...
如何利用CMMI帮助组织消除低价值流程
CMMI发展到今天,过程中历经了不断的蜕变和升级。从早期的CMM到今天的CMMI3.0,从早期的22个过程域优化组合到今天的20个实践域,从早期隶属的SEI到今天的CMMI研究院,所有的变化都是与时俱进,都是为了提供更好的实践&…...
如何理解线程安全这个概念?
文章目录 为什么需要线程安全?线程安全的实现方式总结推荐阅读文章 线程安全(Thread Safety)是指在多线程环境中,多个线程同时访问某个对象时,不会导致程序出现错误的状态或不一致的结果。简单来说,线程安全…...
代码随想录算法训练营第48天| 739. 每日温度,496.下一个更大元素 I,503.下一个更大元素II
第十一章:图论part01 图论理论基础 大家可以在看图论理论基础的时候,很多内容 看不懂,例如也不知道 看完之后 还是不知道 邻接矩阵,邻接表怎么用, 别着急。 理论基础大家先对各个概念有个印象就好,后面在…...
Qt 支持打包成安卓
1. 打开维护Qt,双击MaintenanceTool.exe 2.登陆进去,默认是添加或移除组件,点击下一步, 勾选Android, 点击下一步 3.更新安装中 4.进度100%,完成安装,重启。 5.打开 Qt Creator,编辑-》Preferences... 6.进…...
PDF工具类源码
PDF-Guru: PDF Guru Anki是一款以PDF为中心的多功能办公学习工具箱软件,包含四大板块功能:PDF实用工具箱、Anki制卡神器、Anki最强辅助、视频笔记神器,软件功能众多且强大,熟练运用可以大幅提高办公和学习效率,绝对是您…...
NirCmd-Gui-Chinese-Introduction
简介 此程序是我的一个练习作品,单纯是为了提升编程水平,次要是为了做一个NirCmd的Gui,其实主要成分还是Gui,核心代码就两三行。 主要是Gui,功能基于nircmd.exe实现,程序本身不提供一些重要的功能。 关于…...
吴恩达深度学习笔记(7)
误差分析: 你运行一个算法代替人类计算,但是没有达到人类的效果,需要手动检查算法中的错误,对模型的一些部分做相应调整,才能更好地提升分类的精度。如果不加分析去做,可能几个月的努力对于提升精度并没有…...
二、数据离线处理场景化解决方案
https://connect.huaweicloud.com/courses/learn/Learning/sp:cloudEdu_?courseNocourse-v1:HuaweiXCBUCNXE147Self-paced&courseType1 1.离线处理方案 **业务场景-安平领域** 业务场景-金融领域 离线批处理常用组件 HDFS:分布式文件系统,为各种…...
算法题总结(十四)——贪心算法(上)
贪心算法 什么是贪心 贪心的本质是选择每一阶段的局部最优,从而达到全局最优。 贪心的套路(什么时候用贪心) 刷题或者面试的时候,手动模拟一下感觉可以局部最优推出整体最优,而且想不到反例,那么就试一试…...
hive on tez 指定队列后任务一直处于running状态
如上图所示一直处于running状态,查看日志发现一直重复弹出同一个info: 2024-10-18 16:57:32,739 [INFO] [AMRM Callback Handler Thread] |rm.YarnTaskSchedulerService|: Allocated: <memory:0, vCores:0> 释义: 当前应用程序没有分配到任何内存…...
闲说视频清晰度和各种格式、编码技术的发展历史
文章目录 引子清晰度视频格式:MP4、AVI 、MKV、MOV、WMV、FLV 、RMVB等等什么是视频格式MP4AVIMKVMOVWMVFLVRM / RMVB其他 编码技术:MPEG-1、MPEG-2、MPEG-4、RealVideo、DivX、XviD、H.264(AVC)、H.265(HEVCÿ…...
嵌入式职业规划
嵌入式职业规划 在嵌入式的软件开发中,可以分为: 嵌入式MCU软件开发工程师; 嵌入式Linux底层(BSP)软件开发工程师; 嵌入式Linux应用开发工程师; 嵌入式FPGA算法开发工程师 对于前两个阶段 …...
Nginx - 实现 TCP/DUP流量的按 IP 动态转发
文章目录 需求背景需求目标:使用场景:成功标准:技术要求: Ng配置测试验证 需求 Nginx Stream TCP 协议按 IP 转发 背景 为了优化网络性能和提升服务的可用性,我们需要在 Nginx 中配置 stream 模块,使其根…...
基于深度学习的进化神经网络设计
基于深度学习的进化神经网络设计(Evolutionary Neural Networks, ENNs)结合了进化算法(EA)和神经网络(NN)的优点,用于自动化神经网络架构的设计和优化。通过模拟自然进化的选择、变异、交叉等过…...
软考-软件设计师(10)-专业英语词汇汇总与新技术知识点
场景 以下为高频考点、知识点汇总。 软件设计师上午选择题知识点、高频考点、口诀记忆技巧、经典题型汇总: 软考-软件设计师(1)-计算机基础知识点:进制转换、数据编码、内存编址、串并联可靠性、海明校验码、吞吐率、多媒体等: 软考-软件设计师(1)-计算机基础知识点:进制…...
biliup问题速解指南:从现象到根源的系统排查方法论
biliup问题速解指南:从现象到根源的系统排查方法论 【免费下载链接】biliup 自动直播录制、投稿、twitch、ytb频道搬运工具。命令行投稿(B站)和视频下载工具,提供多种登录方式,支持多p。 项目地址: https://gitcode.com/gh_mirrors/bi/bili…...
如何用DeepSeek高效处理学术论文审稿?5个实用提示词模板分享
如何用DeepSeek高效处理学术论文审稿?5个实用提示词模板分享 学术论文的审稿过程往往让研究者们又爱又恨——它既是提升研究质量的必经之路,又是耗时费力的繁琐环节。想象一下这样的场景:凌晨两点,你刚收到三位审稿人总计20页的修…...
Go语言标准库context包在微服务调用链中的传播与超时控制
在微服务架构中,服务间的调用链复杂且频繁,如何高效管理调用上下文与超时控制成为关键挑战。Go语言标准库中的context包为此提供了轻量级解决方案,通过传递请求上下文和超时信号,确保系统在分布式环境下的可靠性和可维护性。本文将…...
告别手动造数据!用JMeter JSR223预处理程序+Groovy脚本,5分钟搞定接口签名和AES加密
告别手动造数据!用JMeter JSR223预处理程序Groovy脚本,5分钟搞定接口签名和AES加密 性能测试工程师最头疼的莫过于每次执行测试前,都要手动计算接口签名、拼接参数、加密敏感数据。这种重复性工作不仅耗时耗力,还容易出错。想象一…...
智能音箱麦克风阵列设计避坑指南:从频响曲线到腔体结构的5个关键参数
智能音箱麦克风阵列设计避坑指南:从频响曲线到腔体结构的5个关键参数 在智能家居场景中,语音交互的流畅度直接影响用户体验。我曾参与过一款高端智能音箱的声学设计,最初版本在嘈杂环境下识别率不足60%,经过三个月的参数调优最终…...
ComfyUI节点化工作流高效应用全流程指南:从基础搭建到创意实现
ComfyUI节点化工作流高效应用全流程指南:从基础搭建到创意实现 【免费下载链接】ComfyUI The most powerful and modular diffusion model GUI, api and backend with a graph/nodes interface. 项目地址: https://gitcode.com/GitHub_Trending/co/ComfyUI 当…...
5分钟搞定B站缓存视频:m4s转MP4完整解决方案
5分钟搞定B站缓存视频:m4s转MP4完整解决方案 【免费下载链接】m4s-converter 一个跨平台小工具,将bilibili缓存的m4s格式音视频文件合并成mp4 项目地址: https://gitcode.com/gh_mirrors/m4/m4s-converter 你是否遇到过B站缓存视频无法在其他设备…...
Unity3D WEBGL避坑指南:从AssetBundle初始化到PDF显示的全流程解决方案
Unity3D WEBGL开发实战:AssetBundle与PDF显示的深度优化方案 在跨平台游戏开发领域,Unity3D的WEBGL导出功能为开发者打开了浏览器端部署的大门。然而,从桌面端到WEBGL平台的转换远非简单的导出操作,特别是当项目涉及AssetBundle动…...
AutoGLM-Phone-9B环境搭建教程:双显卡配置详解,轻松启动模型服务
AutoGLM-Phone-9B环境搭建教程:双显卡配置详解,轻松启动模型服务 1. 环境准备与硬件要求 1.1 硬件配置要求 AutoGLM-Phone-9B作为一款多模态大语言模型,对硬件配置有特定要求: 显卡配置:至少需要2块NVIDIA RTX 409…...
OpenClaw商业应用边界:Qwen3-14B在个人网店中的合规使用
OpenClaw商业应用边界:Qwen3-14B在个人网店中的合规使用 1. 为什么个人网店需要AI助手? 去年夏天,我的淘宝小店突然迎来一波流量高峰。每天上百条咨询消息让我应接不暇,经常凌晨还在回复"什么时候发货"这类重复问题。…...
