golang压缩,解压tar.gz文件

http://www.dotcoo.com/golang-tar-gzip

golang处理压缩包,我最常用的就是tar.gz了,所以今天写了一个测试一下.代码放这里以后浏览.

压缩文件

package main
  
import (
    "fmt"
    "os"
    "io"
    "archive/tar"
    "compress/gzip"
)
  
func main() {
    // file write
    fw, err := os.Create("tar/lin_golang_src.tar.gz")
    if err != nil {
        panic(err)
    }
    defer fw.Close()
  
    // gzip write
    gw := gzip.NewWriter(fw)
    defer gw.Close()
  
    // tar write
    tw := tar.NewWriter(gw)
    defer tw.Close()
  
    // 打开文件夹
    dir, err := os.Open("file/")
    if err != nil {
        panic(nil)
    }
    defer dir.Close()
  
    // 读取文件列表
    fis, err := dir.Readdir(0)
    if err != nil {
        panic(err)
    }
  
    // 遍历文件列表
    for _, fi := range fis {
        // 逃过文件夹, 我这里就不递归了
        if fi.IsDir() {
            continue
        }
  
        // 打印文件名称
        fmt.Println(fi.Name())
  
        // 打开文件
        fr, err := os.Open(dir.Name() + "/" + fi.Name())
        if err != nil {
            panic(err)
        }
        defer fr.Close()
  
        // 信息头
        h := new(tar.Header)
        h.Name = fi.Name()
        h.Size = fi.Size()
        h.Mode = int64(fi.Mode())
        h.ModTime = fi.ModTime()
  
        // 写信息头
        err = tw.WriteHeader(h)
        if err != nil {
            panic(err)
        }
  
        // 写文件
        _, err = io.Copy(tw, fr)
        if err != nil {
            panic(err)
        }
    }
  
    fmt.Println("tar.gz ok")
}

解压文件

package main
  
import (
    "fmt"
    "os"
    "io"
    // "time"
    "archive/tar"
    "compress/gzip"
)
  
func main() {
    // file read
    fr, err := os.Open("tar/lin_golang_src.tar.gz")
    if err != nil {
        panic(err)
    }
    defer fr.Close()
  
    // gzip read
    gr, err := gzip.NewReader(fr)
    if err != nil {
        panic(err)
    }
    defer gr.Close()
  
    // tar read
    tr := tar.NewReader(gr)
  
    // 读取文件
    for {
        h, err := tr.Next()
        if err == io.EOF {
            break
        }
        if err != nil {
            panic(err)
        }
  
        // 显示文件
        fmt.Println(h.Name)
  
        // 打开文件
        fw, err := os.OpenFile("file2/" + h.Name, os.O_CREATE | os.O_WRONLY, 0644/*os.FileMode(h.Mode)*/)
        if err != nil {
            panic(err)
        }
        defer fw.Close()
  
        // 写文件
        _, err = io.Copy(fw, tr)
        if err != nil {
            panic(err)
        }
          
    }
  
    fmt.Println("un tar.gz ok")
}

呼呼,以后打包下载东西的时候可以使用了.

要将一个Go语言项目打包为Windows可执行文件和Linux安装包,可以使用以下步骤: ## 打包为Windows可执行文件(.exe) 1. 安装Go编译器并设置环境变量。 2. 在项目根目录下使用以下命令生成可执行文件: ``` go build -o myapp.exe ``` 这将在当前目录下生成名为`myapp.exe`的可执行文件。 3. 使用[UPX](https://upx.github.io/)对可执行文件进行压缩,可以减小文件大小: ``` upx myapp.exe ``` 4. 打包压缩后的可执行文件和必要的资源文件为一个zip包,然后将zip包重命名为.exe后缀即可。 ## 打包为Linux安装包(.tar) 1. 安装Go编译器并设置环境变量。 2. 在项目根目录下使用以下命令生成二进制文件: ``` go build -o myapp ``` 这将在当前目录下生成名为`myapp`的二进制文件。 3. 将二进制文件和必要的资源文件放入一个文件夹中。 4. 在该文件夹中创建一个`install.sh`脚本,用于安装程序。例如: ``` #!/bin/bash cp myapp /usr/local/bin/ ``` 这个脚本将把`myapp`二进制文件复制到`/usr/local/bin/`目录下。 5. 使用以下命令将文件夹打包成tar文件: ``` tar -czvf myapp.tar.gz myapp_folder/ ``` 这将在当前目录下生成名为`myapp.tar.gz`的压缩文件。 6. 将tar文件上传到服务器,并使用以下命令解压: ``` tar -xzvf myapp.tar.gz ``` 7. 执行`install.sh`脚本安装程序: ``` sh install.sh ``` 这将把二进制文件复制到指定目录,并为您配置好程序。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值