ioutil.ReadAll悲惨地失败了

Cod*_*dei 0 io null go 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

}
Run Code Online (Sandbox Code Playgroud)

和繁荣

panic: runtime error: invalid memory address or nil pointer dereference
[signal SIGSEGV: segmentation violation code=0x1 addr=0x20 pc=0x46e949]
Run Code Online (Sandbox Code Playgroud)

这个坏男孩来了

sbe*_*rry 5

io.ReadWriter是一个接口,你需要的是一个io.ReadWriter写入(通过io.Copy)并从中返回io.Reader接口的实例.

想到的一种类型是a 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

}
Run Code Online (Sandbox Code Playgroud)

你也吞下了错误,io.Copy这不是一个好主意.