登录
首页 >  Golang >  Go问答

我可以将 *io.ReadCloser 传递给类型为 *io.Reader 的参数吗

来源:stackoverflow

时间:2024-02-20 08:09:53 499浏览 收藏

在Golang实战开发的过程中,我们经常会遇到一些这样那样的问题,然后要卡好半天,等问题解决了才发现原来一些细节知识点还是没有掌握好。今天golang学习网就整理分享《我可以将 *io.ReadCloser 传递给类型为 *io.Reader 的参数吗》,聊聊,希望可以帮助到正在努力赚钱的你。

问题内容

我正在尝试编写一个参数类型为 *io.reader 的函数

func readsomething(r *io.reader) {
    <do something with a reader>
}

但是当我尝试将指针传递给更接近它的读者时

func GetWebPage() {
    resp, _ := http.Get(<url>)
    ReadSomething(&(resp.Body))
}

我收到以下错误: 无法使用 &(resp.body)(*io.readcloser 类型的值)作为 *io.reader 值

这对我来说没有任何意义,指向读取更近类型的解引用指针应该实现 reader 的方法,那么为什么我不能将它作为参数传递给函数需要一个指向 io.reader 的指针吗?


正确答案


io.ReadCloser 是一个接口类型,它是 io.Reader 接口类型的超集。因此,每当需要 io.Reader 时,您都可以传递 io.ReadCloser 的值。

*io.Reader 不是一个接口类型,它是一个指针(指向接口的指针),所以你不能传递 *io.ReadCloser

请注意,这些函数签名的设计很糟糕。你很少需要一个指向接口的指针(当你需要的时候你就会知道,参见 this 的例子)。只需使用接口类型,如果需要,接口可以包装指针。

今天关于《我可以将 *io.ReadCloser 传递给类型为 *io.Reader 的参数吗》的内容介绍就到此结束,如果有什么疑问或者建议,可以在golang学习网公众号下多多回复交流;文中若有不正之处,也希望回复留言以告知!

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