作者热门文章
- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我正试图从这种天气中获取一个 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/
我是一名优秀的程序员,十分优秀!