如何阅读 Go 文档?

我创建了一个简单的 go 程序(基本上只是示例代码):


package main


import (

    "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 - 但是我怎样才能找到其他接受它作为参数的函数呢?文档似乎是“向后”的——如果我知道我想要哪个函数,我可以找到文档,但是如果我有一个类型,我怎么能找到哪些函数可以使用它?


慕姐4208626
浏览 169回答 2
2回答

慕桂英4014372

关于你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 时,我把整个事情都读了下来,这让事情变得容易多了。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go