登录
首页 >  Golang >  Go问答

从 zip.NewWriter 返回 io.ReadCloser

来源:stackoverflow

时间:2024-03-30 15:51:34 447浏览 收藏

本篇文章主要是结合我之前面试的各种经历和实战开发中遇到的问题解决经验整理的,希望这篇《从 zip.NewWriter 返回 io.ReadCloser》对你有很大帮助!欢迎收藏,分享给更多的需要的朋友学习~

问题内容

我正在创建一个缓冲区,然后通过 zip.newwriter() 写入该缓冲区

所以我的代码看起来像这样

// Create a buffer to write our archive to.
buf := new(bytes.Buffer)

// Create a new zip archive.
w := zip.NewWriter(buf)

// Create file in this writer
f, err := w.Create("test.json")

/ Writing data to file
_, _ = f.Write([]byte("some data"))

// Close writer
_ =  w.Close()

// TODO: Return this data in the form of io.ReadCloser

我的最终目标是将文件写入此 zip writer 并以 io.readcloser 的形式返回数据,我的调用函数需要 io.readcloser 中的数据

我尝试寻找并尝试多种方法,但都没有成功。


解决方案


经过评论的一些帮助,我得到了它的工作 所以我们可以直接将buf转换为io.readcloser并返回,不需要进一步转换。

func examplewriter() (io.readcloser, error) {
// create a buffer to write our archive to.
buf := new(bytes.buffer)

// create a new zip archive.
w := zip.newwriter(buf)

// add some files to the archive.
var files = []struct {
    name, body string
}{
    {"readme.txt", "this archive contains some text files."},
    {"gopher.txt", "gopher names:\ngeorge\ngeoffrey\ngonzo"},
    {"todo.txt", "get animal handling licence.\nwrite more examples."},
}
for _, file := range files {
    f, err := w.create(file.name)
    if err != nil {
        log.fatal(err)
    }
    _, err = f.write([]byte(file.body))
    if err != nil {
        log.fatal(err)
    }
}

// make sure to check the error on close.
err := w.close()
if err != nil {
    log.fatal(err)
}

return ioutil.nopcloser(buf), nil // this returns io.readcloser

}

检查 this example 是否适合您

func ExampleWriter() {
    // Create a buffer to write our archive to.
    buf := new(bytes.Buffer)

    // Create a new zip archive.
    w := zip.NewWriter(buf)

    // Add some files to the archive.
    var files = []struct {
        Name, Body string
    }{
        {"readme.txt", "This archive contains some text files."},
        {"gopher.txt", "Gopher names:\nGeorge\nGeoffrey\nGonzo"},
        {"todo.txt", "Get animal handling licence.\nWrite more examples."},
    }
    for _, file := range files {
        f, err := w.Create(file.Name)
        if err != nil {
            log.Fatal(err)
        }
        _, err = f.Write([]byte(file.Body))
        if err != nil {
            log.Fatal(err)
        }
    }

    // Make sure to check the error on Close.
    err := w.Close()
    if err != nil {
        log.Fatal(err)
    }
}

通过系统地检查这些操作的错误,您将看到是否存在任何问题。

本篇关于《从 zip.NewWriter 返回 io.ReadCloser》的介绍就到此结束啦,但是学无止境,想要了解学习更多关于Golang的相关知识,请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>