golang 如何在Go中使用bzip2将多个文件压缩为单个文件

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了golang 如何在Go中使用bzip2将多个文件压缩为单个文件相关的知识,希望对你有一定的参考价值。

func bz2CompressFiles(dstPath string, srcFiles []string) {
	os.Remove(dstPath)

	fileOut, err := os.Create(dstPath)
	u.PanicIfErr(err)

	cmd := exec.Command("bzip2", "--best", "-z")
	cmd.Stdout = fileOut
	stdin, err := cmd.StdinPipe()
	u.PanicIfErr(err)
	err = cmd.Start()
	u.PanicIfErr(err)

	var srcSize int64
	for _, fileName := range srcFiles {
		fi, err := os.Stat(fileName)
		u.PanicIfErr(err)
		srcSize += fi.Size()
		r, err := os.Open(fileName)
		u.PanicIfErr(err)
		_, err = io.Copy(stdin, r)
		u.PanicIfErr(err)
		r.Close()
	}
	err = stdin.Close()
	u.PanicIfErr(err)
	err = cmd.Wait()
	u.PanicIfErr(err)
	err = fileOut.Close()
	u.PanicIfErr(err)

	fi, err := os.Stat(dstPath)
	u.PanicIfErr(err)
	srcSizeStr := humanize.Bytes(uint64(srcSize))
	dstSizeStr := humanize.Bytes(uint64(fi.Size()))
	fmt.Printf("compressed %s to %s, %d files to %s\n", srcSizeStr, dstSizeStr, len(srcFiles), dstPath)
	for i := 0; i < len(srcFiles) && i < 0; i++ {
		fmt.Printf("%s\n", srcFiles[i])
	}
}

Golang Dep:在一个源树中有多个二进制文件

使用lib中的共享库函数和cmd中的几个二进制文件使用以下Go项目布局使用这些库函数并具有外部依赖项:

root
   |
   lib
   cmd
     |
     binary1
           |
           main.go
     binary2
           |
           main.go
     ...

使用dep工具搜索处理项目依赖关系的简单方法。什么是预期的使用模式:在每个Gopkg.*目录中有多个binaryX文件,或者对所有这些二进制文件使用一对Gopkg.tomlGopkg.lock文件?在第二种情况下,我们如何编译这些二进制文件知道vendor目录将在项目根目录而不是binaryX目录?

答案

通常,您只需要一个根目录/供应商目录,其中包含libcmd代码引用的所有各种deps

编译时,就像正常一样。

go install ./cmd/...

(或者你想建立)

以上是关于golang 如何在Go中使用bzip2将多个文件压缩为单个文件的主要内容,如果未能解决你的问题,请参考以下文章

Golang Dep:在一个源树中有多个二进制文件

golang中自定义包

怎样将Go的main包拆分为多个文件

Golang Go语言中的 defer 怎么使用?

如何使用Golang将文件添加到现有的zip文件中

Golang中的init函数