猿问

如何使用 Go newRequest 方法

所以,我刚刚开始使用 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 看起来很有趣,但它的教程和有用的文档几乎为零……请帮助我,正确的方法是什么?


守着星空守着你
浏览 255回答 2
2回答

拉风的咖菲猫

第三个参数是Body,用于 POST 请求。它不适用于标题。要添加标题,req, err := http.NewRequest("DELETE", url, nil)if err != nil{    panic(err);}req.Header.Add("Authorization","1432536546") //string, stringGo 文档确实提供了几个示例。这是本Overview节中的第一个示例。

蛊毒传说

你的假设是正确的,你不能使用NewRequest从方法net/http封装的方式。此外,它没有多大意义,因为NewRequest函数的第三个参数应该是请求的正文有效负载,而不是标头。func NewRequest(method, urlStr string, body io.Reader) (*Request, error)假设库没有错,我的假设是http这里的net/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")
随时随地看视频慕课网APP

相关分类

Go
我要回答