如何使用Go newRequest方法

时间:2016-02-15 12:01:11

标签: go

所以,我刚刚开始使用Go,而我正在尝试学习HTTP包。我在互联网上找到了这个程序

headers := make(map[string]string)
headers["authorization"] = "1432536546" //the auhorization string

url :=    "anUrl\"

req, err := http.NewRequest("DELETE", url, headers)
if err != nil {
    panic(err)
}

但这是错误的,因为它似乎无法使用这样的地图,因为他们没有实现io.Reader界面:

  cannot use headers (type map[string]string) as type io.Reader in argument to http.NewRequest:
  map[string]string does not implement io.Reader (missing Read method)

这是我尝试过的第一个代码片段之一,实际上我从我认为可靠的来源获得它,显然它不会编译。 Go看起来很有趣,但它有很多零教程和有用的文档......请帮助我,这是正确的方法吗?

2 个答案:

答案 0 :(得分:2)

您的假设是正确的,您不能以这种方式使用net/http包中的NewRequest方法。

此外,它没有多大意义,因为NewRequest函数的第三个参数应该是请求的主体有效负载,而不是标题。

func NewRequest(method, urlStr string, body io.Reader) (*Request, error)

假设库不正确,我的假设是这里的http包不是net/http包,而是导入为http的某种其他HTTP客户端。实际上,如果你导入

import (
  "github.com/foobar/someclient/http"
)

它也会被引用为http。您应该检查文件的导入。

仅供参考,添加标题的正确方法是:

req, err := http.NewRequest("DELETE", "/path/to/something", nil)
if err != nil {
    // do something
}
req.Header.Add("authorization", "1432536546")

答案 1 :(得分:1)

第三个参数是Body,用于POST请求。它不适用于标题。 要添加标题,

req, err := http.NewRequest("DELETE", url, nil)
if err != nil{
    panic(err);
}

req.Header.Add("Authorization","1432536546") //string, string

Go文档确实提供了几个示例。这是Overview部分中的第一个示例。