Go http请求后如何获取响应
我正在学习围棋,在这个领域我是一个真正的新手 当我试图复制一些值时,我面临一个问题 我正在做的是:Go http请求后如何获取响应,go,goquery,Go,Goquery,我正在学习围棋,在这个领域我是一个真正的新手 当我试图复制一些值时,我面临一个问题 我正在做的是: 我想使用httpRequest在[response]中获得一些响应 之后,我想将存储的值保存在'origin.txt'作为响应 我想通过使用goquery包得到一个特定的值 ) 但在这种情况下,我可以从2)中得到我想要的值,但从3)中什么也得不到 首先,我认为问题在于,3)处的响应对象受到2)动作的影响。因为它是一个引用对象 所以我试着把它复制到另一个物体上,然后再做一次 origin := *r
origin := *response
但是,我得到了和第一次一样的结果
我该怎么办?
如何通过引用值将引用值分配给另一个引用值
我应该为每次尝试请求两次吗?实际上,我看不出您在哪里使用2和3之间的共享资源
然而,这句话不会给你带来多少好处。数据(response.Body
)是一个io.ReadCloser
。ioutil.ReadAll()
将使用并存储流中的所有数据。你只能这样做一次
但是,数据存储在
origin
中。如果您需要另一个io.Reader
来读取该数据(比如案例3),那么您可以将该字节片再次设置为io.Reader
:bytes.NewReader(origin)
对不起。我改变了我的问题。。。很抱歉问题出在[响应]对象!很好,就像我当时建议的那样,使用字节。NewReader(origin)
。这是一个很好的解决方案。使用您的解决方案[func NewReader(b[]字节)*Reader]这一点,我可以达到我的目的。谢谢!!!
origin_ ,_:= ioutil.ReadAll(response.Body)
f_, err := os.Create("origin.txt")
f_.Write(origin_);
doc, err := goquery.NewDocumentFromReader(response.Body)
if err != nil {
log.Fatal(err)
}
doc.Find(".className").Each(func(i int, s *goquery.Selection) {
w.WriteString("============" + strconv.Itoa(i) + "============")
s.Find("tr").Each(func(i int, s_ *goquery.Selection) {
fmt.Println(s_.Text())
w.WriteString(s_.Text())
})
}
origin := *response