如何阅读Go文档?

时间:2013-03-15 13:43:45

标签: 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实际上是Response类型的Get()?

无论如何,http.Get()返回一个Bodyio.ReadCloser的响应。 ioutil.ReadAll()接受一个io.Reader - 但我怎样才能找到接受这个作为参数的其他函数呢?有点似乎文档是“向后” - 如果我知道我想要哪个函数我可以找到文档,但如果我有一个类型,我怎么能找到哪些函数可以用呢?

2 个答案:

答案 0 :(得分:7)

函数定义如下:

func (c *Client) Get(url string) (resp *Response, err error)
func (h Header) Get(key string) string
func Get(url string) (resp *Response, err error)

请参阅how functions are declared

func和函数名称(Get)之间,您有接收者类型和名称(在括号之间)。这些函数中只有一个没有接收器,必须直接调用前缀为包名(http)。这就是你需要的那个。

答案 1 :(得分:0)

关于您的io.Readerio.ReadCloser问题:

这些是接口,如果你不熟悉它们,请阅读它们here

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

type Reader interface{
     Read([]byte)(int, error)
}

type ReadCloser interface{
     Read([]byte)(int, error)
     Close()
}

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

因此,您只需将ReadCloser作为Reader传递。

接口工作的方式在开始时有点难以理解,因为它们是如此隐含, 但它们非常强大,可以为您提供很多可能性。绝对阅读我上面链接的文字。我读了整篇文章,当我开始时,它让事情变得更容易。