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

Golang 中的 archive/zip 包详解(二):常用类型

Golang 中的 archive/zip 包用于处理 ZIP 格式的压缩文件,提供了一系列用于创建、读取和解压缩 ZIP 格式文件的函数和类型,使用起来非常方便。

zip.File 类型

定义如下:

type File struct {FileHeaderzip          *Readerzipr         io.ReaderAtheaderOffset int64 // includes overall ZIP archive baseOffsetzip64        bool  // zip64 extended information extra field presence
}

表示一个 ZIP 文件中的单个文件的信息,文件的元数据信息,例如文件名、文件大小、修改时间等包含在 FileHeader 中,有两个重要的方法:

  • func (f *File) DataOffset() (offset int64, err error),返回文件的可能存在的压缩数据相对于 zip 文件起始的偏移量。
  • func (f *File) Open() (rc io.ReadCloser, err error),返回一个 io.ReadCloser 类型的对象,提供读取文件内容的方法。

zip.FileHeader 类型

定义如下:

type FileHeader struct {Name stringComment stringNonUTF8 boolCreatorVersion uint16ReaderVersion  uint16Flags          uint16Method uint16Modified time.TimeModifiedTime uint16ModifiedDate uint16CRC32 uint32CompressedSize uint32UncompressedSize uint32CompressedSize64 uint64UncompressedSize64 uint64Extra         []byteExternalAttrs uint32 // Meaning depends on CreatorVersion
}

包含了文件在ZIP文件中的元数据信息,例如文件名、文件大小、修改时间等。

zip.Writer 类型

定义如下:

type Writer struct {cw          *countWriterdir         []*headerlast        *fileWriterclosed      boolcompressors map[uint16]Compressorcomment     string// testHookCloseSizeOffset if non-nil is called with the size// of offset of the central directory at Close.testHookCloseSizeOffset func(size, offset uint64)
}

实现了一个 zip 文件写入器。

zip.Reader 类型

定义如下:

type Reader struct {r             io.ReaderAtFile          []*FileComment       stringdecompressors map[uint16]Decompressor// Some JAR files are zip files with a prefix that is a bash script.// The baseOffset field is the start of the zip file proper.baseOffset int64// fileList is a list of files sorted by ename,// for use by the Open method.fileListOnce sync.OncefileList     []fileListEntry
}

用于创建新的 ZIP 文件并将文件添加到其中。

zip.ReadCloser 类型

定义如下:

type ReadCloser struct {f *os.FileReader
}

用于读取文件的内容,并在读取完成后关闭文件。

zip.Compressor 类型

定义如下:

type Compressor func(w io.Writer) (io.WriteCloser, error)

返回一个用于压缩用途的 io.WriteCloser 类型的对象。

zip.Decompressor 类型

定义如下:

type Decompressor func(r io.Reader) io.ReadCloser

返回一个用于解压缩用途的 io.ReadCloser 类型的对象。

相关文章:

Golang 中的 archive/zip 包详解(二):常用类型

Golang 中的 archive/zip 包用于处理 ZIP 格式的压缩文件,提供了一系列用于创建、读取和解压缩 ZIP 格式文件的函数和类型,使用起来非常方便。 zip.File 类型 定义如下: type File struct {FileHeaderzip *Readerzipr io…...

Qt应用开发(基础篇)——错误提示框 QErrorMessage

一、前言 QErrorMessage类继承于QDialog,是一个用来显示错误信息的对话框。 提示框QDialog 消息对话框 QMessageBox QErrorMessage错误消息对话框提供了一个主文本窗口、一个复选框、一个图标和按钮。文本框用来显示错误信息,复选框用来让用户选择未来是…...

HLS 后端示例

更多 TVM 中文文档可访问 →Apache TVM 是一个端到端的深度学习编译框架,适用于 CPU、GPU 和各种机器学习加速芯片。 | Apache TVM 中文站 TVM 支持带有 SDAccel 的 Xilinx FPGA 板,接下来介绍如何将 TVM 部署到 AWS F1 FPGA 实例。 备注:此功…...

实录分享 | Alluxio在AI/ML场景下的应用

欢迎来到【微直播间】,2min纵览大咖观点 本次分享主要包括五个方面: 关于Alluxio;盘点企业在尝试AI时面临的挑战;Alluxio在技术栈中的位置;Alluxio在模型训练&模型上线场景的应用;效果对比&#xff1…...

Streamlit 讲解专栏(十二):数据可视化-图表绘制详解(下)

文章目录 1 前言2 使用st.vega_lite_chart绘制Vega-Lite图表2.1 示例1:绘制散点图2.2 示例2:自定义主题样式 3 使用st.plotly_chart函数创建Plotly图表3.1 st.plotly_chart函数的基本用法3.2 st.plotly_chart 函数的更多用法 4 Streamlit 与 Bokeh 结合进…...

Dockerfile 使用教程

1.Dockerfile 1.1 什么是Dockerfile Dockerfile可以认为是 Docker镜像的描述文件,是由一系列命令和参数构成的脚本 。主要作用是 用来构建docker镜像的构建文件 。 通过架构图可以看出通过DockerFile可以直接构建镜像 1.2 Dockerfile解析过程 构建镜像步骤&#xf…...

InnoDB的Buffer

一、Buffer内存结构 MySQL 服务器启动的时候就向操作系统申请了一片连续的内存,默认128M,可通过从参数修改。 [server] innodb_buffer_pool_size 268435456 1.1 控制块 控制块包括该页所属的 表空间编号、页号、缓存页在 Buffer Pool 中的地址、链表…...

普洛斯常熟东南数据中心获LEED金级认证及IDCC绿色算力基础设施奖

近日,普洛斯常熟东南数据中心获得美国绿色建筑评估标准体系LEED v4 BDC(建筑设计与建造)金级认证,并获评IDCC2023长三角区域绿色算力基础设施奖。以可持续发展理念为核心,该数据中心从设计规划、开发建设,到…...

RabbitMQ 启动及参数说明

/usr/local/lib/erlang/erts-10.4/bin/beam.smp -W w -A 128 -MBas ageffcbf -MHas ageffcbf -MBlmbcs 512 -MHlmbcs 512 -MMmcs 30 -P 1048576 -t 5000000 -stbt db -zdbbl 128000 -K true – -root /usr/local/lib/erlang -progname erl – -home /var/lib/rabbitmq – -pa /…...

Vite打包性能优化及填坑

最近在使用 Vite4.0 构建一个中型前端项目的过程中,遇到了一些坑,也做了一些项目在构建生产环境时的优化,在这里做一个记录,以便后期查阅。(完整配置在后面) 上面是dist文件夹的截图,里面的内容已经有30mb了&#xff…...

JDBC使用了哪种设计模式

JDK中提供了操作数据库的接口,比如 java.sql.Driver java.sql.Connection java.sql.Statement java.sql.PreparedStatement 不同的数据库厂商提供操作自己数据库的驱动包, 比如mysql public class Driver extends NonRegisteringDriver implements jav…...

JVM-性能优化工具 MAT

一、MAT下载和安装 1、概述 MAT(Memory Analyzer Tool)工具是一款功能强大的]ava堆内存分析器。可以用于查找内存泄漏以及查看内存消耗情况。MAT是基于Eclipse开发的,不仅可以单独使用,还可以作为插件的形式嵌入在Eclipse中使用…...

Python Flask flasgger api文档[python/flask/flasgger]

首先需要安装依赖: pip install flasgger封装swagger.py文件,代码如下: from flasgger import Swagger swagger Swagger() 然后在主应用中(项目入口文件)加入以下代码: from flask import Flask from …...

k8s常见命令

基础知识 1,deployment和pod关系 一个pod里面好几个container,deployment是针对这个pod的配置文件,比如设置这个pod有几个副本 2,ip地址 node有ip,pod也有ip。 node的ip用于集群内部和外部访问,pod用于…...

Unity3d C#实现调取网络时间限制程序的体验时长的功能

前言 如题的需求应该经常在开发被提到,例如给客户体验3–5天的程序,到期后使其不可使用,或者几年的使用期限。这个功能常常需要使用到usb加密狗来限制,当然这也的话就需要一定的硬件投入。很多临时提供的版本基本是要求软件来实现…...

常静相伴:深度解析C++中的const与static关键字

个人主页:北海 🎐CSDN新晋作者 🎉欢迎 👍点赞✍评论⭐收藏✨收录专栏:C/C🤝希望作者的文章能对你有所帮助,有不足的地方请在评论区留言指正,大家一起学习交流!&#x1f9…...

Linux入门之进程信号|信号产生的方式

文章目录 一、信号入门 1.linux信号的基本概念 2.使用kill -l 命令可以查看系统定义的信号列表 3.信号处理常见方式 二、产生信号 1.通过终端按键产生信号 2.通过调用系统函数向进程发信号 3.由软条件产生信号 4.硬件异常产生信号 1. /0异常 2.模拟野指针 一、信号入门…...

Unity中的数学基础——贝塞尔曲线

一:前言 一条贝塞尔曲线是由一组定义的控制点P0到 Pn,n1为线性,n2为二次......第一个和最后一个控制点称为起点和终点,中间的控制点一般不会位于曲线上 获取两个点之间的点就是通过线性插值( Mathf.Lerp&#xff09…...

大数据平台安全主要是指什么安全?如何保障?

大数据时代已经来临,各种数据充斥着我们的生活与工作。随着数据的多样性以及复杂性以及大量性,大数据平台诞生了。但对于大数据平台大家都不是很了解,有人问大数据平台安全主要是指什么安全?如何保障? 大数据平台安全…...

Flutter的未来与趋势,23年还学吗?

随着移动应用市场的不断扩大,跨平台开发框架的需求也越来越大。Flutter框架可以帮助开发者在不同平台上快速开发高质量的移动应用程序,这种趋势将进一步推动Flutter的发展和普及。 作为一名前端开发工程师,学习Flutter框架是非常有必要的。因…...

AI犯了错没人追责,工程师犯了错丢饭碗?

芯片公司开始大量引入AI辅助设计工具,生成RTL代码、跑仿真、做时序分析。与此同时,公司对工程师的容错空间越来越小,考核越来越严,出了bug第一反应是找人背锅。这两件事放在一起,细想一下,其实挺荒诞的。AI…...

为什么你的ElevenLabs沪语输出像“洋泾浜”?资深ASR工程师用12组基频曲线图揭示声调失准根源

更多请点击: https://codechina.net 第一章:沪语语音合成的声调失准现象全景扫描 沪语(上海话)作为典型的吴语代表,具有复杂的连读变调系统与高辨义性声调特征,这使得其语音合成在声调建模环节极易出现系统…...

JMeter断言实战:从误配到分层校验的避坑指南

1. 为什么断言不是“加个检查框”就完事了?很多人第一次在 JMeter 里点开“添加 → 断言 → 响应断言”,填上“包含文本:success”,跑完看绿色小勾就以为接口测试闭环了。我带过三届测试团队,新同事交来的脚本里&#…...

ElevenLabs支持闽南语吗?福建话语音合成实测:从API调用到音色克隆的7步通关手册

更多请点击: https://intelliparadigm.com 第一章:ElevenLabs福建话语音支持现状与能力边界 ElevenLabs 目前尚未在官方语音模型库中提供对福建话(含闽南语、闽东语等分支)的原生支持。其公开文档与 API 文档均未列出任何以“Fuj…...

8.C# —— 随机数、DateTime时间、字符串

一、C# 随机数(伪随机 安全随机)1. 核心概念计算机中没有真正的随机数,生成的都是伪随机数(通过算法 种子计算得出)。种子相同 → 生成的随机数序列完全相同不指定种子 → 默认使用系统当前时间作为种子,…...

EASY-HWID-SPOOFER:Windows硬件指纹保护终极方案

EASY-HWID-SPOOFER:Windows硬件指纹保护终极方案 【免费下载链接】EASY-HWID-SPOOFER 基于内核模式的硬件信息欺骗工具 项目地址: https://gitcode.com/gh_mirrors/ea/EASY-HWID-SPOOFER 在数字时代,您的电脑硬件信息正在被悄无声息地追踪。无论是…...

OpCore-Simplify:10分钟搞定黑苹果配置,告别3天手动调试的智能神器

OpCore-Simplify:10分钟搞定黑苹果配置,告别3天手动调试的智能神器 【免费下载链接】OpCore-Simplify A tool designed to simplify the creation of OpenCore EFI 项目地址: https://gitcode.com/GitHub_Trending/op/OpCore-Simplify 还在为复杂…...

业务接口安全加固:杜绝恶意刷量与非法调用风险

业务接口安全加固方法输入验证与过滤 对所有传入参数进行严格校验,包括数据类型、长度、格式(如正则匹配)。对特殊字符进行转义或过滤,防止SQL注入、XSS等攻击。使用白名单机制限制可接受的输入范围。访问频率限制 基于IP、用户ID…...

如何快速掌握Pixel设备刷机:新手完整教程与PixelFlasher刷机工具指南

如何快速掌握Pixel设备刷机:新手完整教程与PixelFlasher刷机工具指南 【免费下载链接】PixelFlasher Pixel™ phone flashing GUI utility with features. 项目地址: https://gitcode.com/gh_mirrors/pi/PixelFlasher 你是否曾经因为复杂的命令行刷机操作而感…...

Graphviz 高级技巧:如何优化复杂图形的布局与渲染

Graphviz 高级技巧:如何优化复杂图形的布局与渲染 【免费下载链接】graphviz Simple Python interface for Graphviz 项目地址: https://gitcode.com/gh_mirrors/gr/graphviz Graphviz 是一款强大的图形可视化工具,通过其简单的 Python 接口&…...