所以,我刚刚开始使用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看起来很有趣,但它有很多零教程和有用的文档......请帮助我,这是正确的方法吗?
答案 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
部分中的第一个示例。