英文:
how to use Go newRequest method
问题
所以,我刚开始学习Go,并尝试学习HTTP
包。我在互联网上找到了这个程序:
headers := make(map[string]string)
headers["authorization"] = "1432536546" //授权字符串
url := "anUrl"
req, err := http.NewRequest("DELETE", url, headers)
if err != nil {
panic(err)
}
但是它是错误的,因为似乎不能像这样使用映射,因为它们没有实现io.Reader
接口:
无法将headers(类型为map[string]string)用作http.NewRequest的参数类型io.Reader:
map[string]string没有实现io.Reader(缺少Read方法)
这是我尝试的第一个代码片段,我实际上是从我认为可靠的来源获取的,显然它无法编译。Go看起来非常有趣,但几乎没有教程和有用的文档...请帮助我,应该如何正确做到这一点?
英文:
So, I've just started with Go and I'm trying to learn HTTP
package. I found this program on the internet
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)
}
But it is wrong, as it appears you can't use maps like this as they don't implement the io.Reader
interface:
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)
This is one of the first code snippets I tried, I actually got it from what I thought to be a reliable source, and obviously it doesn't compile. Go looks pretty interesting, but it has pretty much zero tutorials and useful documentation... Please help me, what is the right way to do it?
答案1
得分: 3
第三个参数是Body,用于POST请求。它不是用于头部的。
要添加头部,可以使用以下代码:
req, err := http.NewRequest("DELETE", url, nil)
if err != nil{
panic(err);
}
req.Header.Add("Authorization","1432536546") //string, string
Go文档提供了几个示例,这个示例是Overview
部分的第一个示例。
英文:
The third parameter is Body, which is used in POST requests. It is not for headers.
To add headers,
req, err := http.NewRequest("DELETE", url, nil)
if err != nil{
panic(err);
}
req.Header.Add("Authorization","1432536546") //string, string
The Go documentation does provide several examples. This one is the first example in the Overview
section.
答案2
得分: 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 {
// 处理错误
}
req.Header.Add("authorization", "1432536546")
英文:
Your assumption is correct, you can't use the NewRequest
method from the net/http
package in that way.
Moreover, it doesn't make a lot of sense as the third parameter of the NewRequest
function is supposed to be the body payload of the request, not the headers.
func NewRequest(method, urlStr string, body io.Reader) (*Request, error)
Assuming the library is not incorrect, My assumption is that the http
package here is not the net/http
package, rather some sort of other HTTP client that is imported as http
. In fact, if you import
import (
"github.com/foobar/someclient/http"
)
it will also be referenced as http
. You should check the import of the file.
FYI, the correct way to add headers is:
req, err := http.NewRequest("DELETE", "/path/to/something", nil)
if err != nil {
// do something
}
req.Header.Add("authorization", "1432536546")
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论