为了账号安全,请及时绑定邮箱和手机立即绑定

如何阅读 Go 文档?

如何阅读 Go 文档?

Go
慕姐4208626 2021-06-02 21:17:54
我创建了一个简单的 go 程序(基本上只是示例代码):package mainimport (    "fmt"    "io/ioutil"    "net/http")func getPage(url string) (body []byte, err error) {    resp, err := http.Get(url)    body = nil    if (err != nil) {        return    }    defer resp.Body.Close()    body, err = ioutil.ReadAll(resp.Body)    return}func main() {    startUrl := "http://slashdot.org/"    body, err := getPage(startUrl)    if (err != nil) {        fmt.Println("Error: " , err)    }    fmt.Println(body)}我正在尝试阅读文档以了解它们是如何组合在一起的。第一个问题:http.Get()。它不在文档中(位于http://golang.org/pkg/net/http/)。除了它是,但在响应下。但是还有 2 个其他的 Get() 函数。我怎么知道 net/http.Get 实际上是响应类型上的 Get() ?无论如何,所以http.Get()返回了一个响应Body的io.ReadCloser。ioutil.ReadAll() 需要一个 io.Reader - 但是我怎样才能找到其他接受它作为参数的函数呢?文档似乎是“向后”的——如果我知道我想要哪个函数,我可以找到文档,但是如果我有一个类型,我怎么能找到哪些函数可以使用它?
查看完整描述

2 回答

?
慕桂英4014372

TA贡献1871条经验 获得超13个赞

关于你io.Reader和io.ReadCloser问题:


这些是接口,如果您不熟悉它们,请在此处阅读它们


接口基本上是一组方法,这两个定义如下:


type Reader interface{

     Read([]byte)(int, error)

}


type ReadCloser interface{

     Read([]byte)(int, error)

     Close()

}

这意味着任何具有上述签名的读取方法的具体数据类型都可以作为 io.Reader 传递。满足 io.ReadCloser 的数据类型肯定会这样做,因为它必须提供 Read 方法和额外的 close 方法。


所以你可以简单地将你的 ReadCloser 作为 Reader 传递。


接口在 Go 中的工作方式一开始有点难以理解,因为它们非常隐含,但是它们非常强大,并为您提供了很多可能性。一定要阅读我上面链接的文字。当我开始使用 go 时,我把整个事情都读了下来,这让事情变得容易多了。




查看完整回答
反对 回复 2021-06-07
  • 2 回答
  • 0 关注
  • 168 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信