archive/tar
tar 包实现了 tar 格式压缩文件的存取
- 打包 a.txt b.txt 到 ab.tar
func Tar() {
// 创建 ab.tar 文件
target, err := os.OpenFile("archive/tar/ab.tar", os.O_CREATE|os.O_WRONLY, 0644)
if err != nil {
log.Fatalln(err)
}
defer target.Close()
tw := tar.NewWriter(target)
defer tw.Close()
files := []string{"archive/tar/a.txt", "archive/tar/b.txt"}
for _, fileName := range files {
file, err := os.Open(fileName)
if err != nil {
log.Fatalln(err)
}
fileInfo, err := file.Stat()
if err != nil {
log.Fatalln(err)
}
hdr := &tar.Header{
Name: fileName,
Size: fileInfo.Size(),
}
if err := tw.WriteHeader(hdr); err != nil {
log.Fatalln(err)
}
// 读取文件内容并写入 tar 文件
if _, err := io.Copy(tw, file); err != nil {
log.Fatalln(err)
}
file.Close()
}
}
- 解压 ab.tar
func Untar() {
// 解压 ab.tar 文件
tarFile, err := os.Open("archive/tar/ab.tar")
if err != nil {
log.Fatalln(err)
}
defer tarFile.Close()
tr := tar.NewReader(tarFile)
for {
hdr, err := tr.Next()
if err == io.EOF {
break
}
if err != nil {
log.Fatalln(err)
}
// 打印文件名和文件内容
fmt.Printf("Contents of %s:\n", hdr.Name)
if _, err := io.Copy(os.Stdout, tr); err != nil {
log.Fatalln(err)
}
fmt.Println()
}
}
🛒 站长推荐(京东联盟)
- 《Go 程序设计语言》(Go 语言圣经,机械工业出版社) —— Go 官方团队出品,公认入门第一书
- 《Go 语言实战》(异步图书,人民邮电出版社) —— 实战导向,面试前巩固工程手感
- 《Go 语言编程之旅:一起用 Go 做项目》(博文视点,电子工业出版社) —— 项目驱动入门,从零写出完整应用
- Keychron K1Max 矮轴机械键盘(Mac/Win 双系统,QMK/VIA 开源改键) —— 轻薄矮轴 + 开源固件,程序员桌面常客
- 罗技 MX Master 3S 无线鼠标(Flow 跨屏,静音电磁滚轮) —— 人体工学设计,写代码一整天手不酸
以上链接含京东联盟推广代码;通过链接购买本站可能获得少量佣金,不影响你的购买价格。
📮 关注公众号「GO语言入门之路」
每周更新 Go + AI 应用开发实战:AI 面试官完整项目、MCP、Agent 工程化,完整源码随文章首发。
微信扫码,或搜索「GO语言入门之路」关注,第一时间获取系列更新与源码,不再错过任何一篇。