我正在学习Go,在这个领域是一个真正的新手.
当我尝试复制某些值时,我遇到了问题.
我在做的是:
- 我想在[response]中使用httpRequest获得一些响应.
httpClient := &http.Client{}
response, err := httpClient.Do(req)
if err != nil {
panic(err)
}
Run Code Online (Sandbox Code Playgroud)
- 之后,我想在'origin.txt'的响应中保存存储的值
origin_ ,_:= ioutil.ReadAll(response.Body)
f_, err := os.Create("origin.txt")
f_.Write(origin_);
Run Code Online (Sandbox Code Playgroud)
- 我想通过使用goquery包获得一个特定的值.
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())
})
}
Run Code Online (Sandbox Code Playgroud)
)
但在这种情况下,我可以从2)得到一个我想要的值,但不能从3)得到任何东西.
首先,我认为问题是,3)的响应对象受2)动作的影响.因为它是一个参考对象.
所以我试着把它复制到另一个对象,然后再做一次.
origin := *response
Run Code Online (Sandbox Code Playgroud)
但是,我得到了与第一个相同的结果.
我该怎么办?如何通过其值将参考值分配给另一个?
我应该每次尝试两次吗?
我实际上看不到你在2和3之间使用共享资源的位置.
然而,据说origin := *response不会给你带来太多.data(response.Body)是一个io.ReadCloser.该ioutil.ReadAll()会消耗和存储所有的数据流具有数据.你只能这样做一次.
但是,您存储了数据origin.如果需要其他io.Reader的数据(比如为3的情况下),那么你可以让该字节片看起来像io.Reader一次:bytes.NewReader(origin).
| 归档时间: |
|
| 查看次数: |
67 次 |
| 最近记录: |