Golang:将xml转换为gzip的问题

问题描述 投票:0回答:1

我正在开发一个使用golang将xml文件压缩为gzip的程序。

但是该程序无法生成文件,但是当我尝试将.txt文件转换为gzip时,它的确生成了输出。这是我的程序:-

package main

import (
"bytes"
"compress/gzip"
"fmt"
"io"
"log"
"os"
)

type Notes struct {
To string `xml:"to"`
From string `xml:"from"`
Heading string `xml:"heading"`
Body string `xml:"body"`
}



func main() {
var buf bytes.Buffer
zw := gzip.NewWriter(&buf)

// Setting the Header fields is optional.
zw.Name = "new.xml"

_, err := zw.Write([]byte("Compressing"))
if err != nil {
log.Fatal(err)
}

if err := zw.Close(); err != nil {
log.Fatal(err)
}

zr, err := gzip.NewReader(&buf)
if err != nil {
log.Fatal(err)
}

fmt.Printf("Name: %s", zr.Name)

if _, err := io.Copy(os.Stdout, zr); err != nil {
log.Fatal(err)
}

if err := zr.Close(); err != nil {
log.Fatal(err)
}

}

要生成所需的.gz文件,我应该怎么做。

xml go gzip data-conversion
1个回答
0
投票

现在,zw.Write()调用会将(压缩的)数据写入buff。因为,相反,您想将其写入文件,所以您应该创建可以执行此操作的文件。

最简单的方法是使用os.Create()。此函数返回一个*os.File,它实现了io.Writer

结果代码将是这样的:

package main

import (
    "compress/gzip"
    "log"
    "os"
)

func main() {
    //  This creates a file and returns an implementation of io.Writer
    fileWriter, err := os.Create("./file.gz")
    if err != nil {
        log.Fatal(err)
    }

    //  Use the io.Writer to create the gzip.Writer.
    zw := gzip.NewWriter(fileWriter)

    // Setting the Header fields is optional.
    zw.Name = "new.xml"

    //  When gzip.Writer.Write is called, it will pass on the data to the Write func of the io.Writer we passed on line 17.
    //  If there is an error writing to the actual file, it will be returned.
    _, err = zw.Write([]byte("Compressing"))
    if err != nil {
        log.Fatal(err)
    }

    // This closes the gzip writer
    if err := zw.Close(); err != nil {
        log.Fatal(err)
    }

    //  This closes the actual file.
    if err := fileWriter.Close(); err != nil {
        log.Fatal(err)
    }
}

© www.soinside.com 2019 - 2024. All rights reserved.