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.toml
和Gopkg.lock
文件?在第二种情况下,我们如何编译这些二进制文件知道vendor
目录将在项目根目录而不是binaryX
目录?
答案
通常,您只需要一个根目录/供应商目录,其中包含lib
和cmd
代码引用的所有各种deps
编译时,就像正常一样。
go install ./cmd/...
(或者你想建立)
以上是关于golang 如何在Go中使用bzip2将多个文件压缩为单个文件的主要内容,如果未能解决你的问题,请参考以下文章
Golang Dep:在一个源树中有多个二进制文件
golang中自定义包
怎样将Go的main包拆分为多个文件
Golang Go语言中的 defer 怎么使用?
如何使用Golang将文件添加到现有的zip文件中
Golang中的init函数