go - ioutil.ReadAll 惨遭失败

标签 go io null reader

我正试图从这种天气中获取一个 io.Reader,它是我给出的链接或路径。对于某些上下文,我正在使用标志

func getString(link, path string) (io.Reader, error) {

    var dick io.ReadWriter

    if link != "" {
        resp, err := http.Get(link)
        if err != nil {
            return nil, err
        }

        io.Copy(dick, resp.Body)
    }

    if path != "" {
        file, err := os.Open(path)
        if err != nil {
            return nil, err
        }

        io.Copy(dick, file)
    }

    return dick, nil

}

和繁荣

panic: runtime error: invalid memory address or nil pointer dereference
[signal SIGSEGV: segmentation violation code=0x1 addr=0x20 pc=0x46e949]

这个坏男孩出现了

最佳答案

io.ReadWriter 是一个接口(interface),你需要的是一个 io.ReadWriter 的实例来写入(通过 io.Copy)并返回 io .Reader 界面。

想到的一种类型是 bytes.Buffer。你的代码看起来像这样

func getString(link, path string) (io.Reader, error) {

    dick := bytes.NewBuffer(nil)

    if link != "" {
        resp, err := http.Get(link)
        if err != nil {
            return nil, err
        }

        io.Copy(dick, resp.Body)
    }

    if path != "" {
        file, err := os.Open(path)
        if err != nil {
            return nil, err
        }

        io.Copy(dick, file)
    }

    return dick, nil

}

您还吞下了来自 io.Copy 的错误,这不是一个好主意。

关于go - ioutil.ReadAll 惨遭失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47256520/

相关文章:

go - 在应用程序中导入本地库和文件

assembly - 如何在汇编中使用 28 位 PIO 正确从磁盘读取多个扇区?

php - mysql where子句中如何检查多个字段的空值

java - 当java中另一个jTextfield为空时如何再次禁用jTextfield

如果任何字段包含 NULL,MySQL CONCAT 将返回 NULL

go - 如何将 'default' 结构体标签与 Go 的 envconfig 库一起使用?

go - 自定义 slice 类型和底层类型之间的分配

go - 嵌套接口(interface) : X does not implement Y (Wrong type for Z method)

c++ - (简单例子)MPI parallel io writing garbage

c# - 如何向 Console.ReadLine() 添加超时?