我正在学习Go,在这个领域是一个真正的新手. 当我尝试复制某些值时,我遇到了问题. 我在做的是: I want to get some response in [response] using httpRequest. httpClient := http.Client{}response, err := httpCl
当我尝试复制某些值时,我遇到了问题.
我在做的是:
- I want to get some response in [response] using httpRequest.
httpClient := &http.Client{} response, err := httpClient.Do(req) if err != nil { panic(err) }
- After that, I want to save the stored value in response at ‘origin.txt’
origin_ ,_:= ioutil.ReadAll(response.Body) f_, err := os.Create("origin.txt") f_.Write(origin_);
- And I want to get a specific value by using goquery package.
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()) }) }
)
但在这种情况下,我可以从2)得到一个我想要的值,但不能从3)得到任何东西.
首先,我认为问题是,3)的响应对象受2)动作的影响.因为它是一个参考对象.
所以我试着把它复制到另一个对象,然后再做一次.
origin := *response
但是,我得到了与第一个相同的结果.
我该怎么办?
如何通过其值将参考值分配给另一个?
我应该每次尝试两次吗?
我实际上看不到你在2和3之间使用共享资源的位置.然而,据说起源:= *响应不会给你带来太多.数据(response.Body)是一个io.ReadCloser. ioutil.ReadAll()将使用和存储流所具有的所有数据.你只能这样做一次.
但是,您将数据存储在原点中.如果您需要另一个io.Reader来存储该数据(例如情况3),那么您可以使该字节切片再次看起来像io.Reader:bytes.NewReader(origin).