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 + AI 应用开发实战:AI 面试官完整项目、MCP、Agent 工程化,完整源码随文章首发。

微信扫码,或搜索「GO语言入门之路」关注,第一时间获取系列更新与源码,不再错过任何一篇。

如有疑问关注公众号给我留言
wx

关注公众号

©2017-2026 鲁ICP备17023316号-1 Powered by Hugo · 隐私政策