问题场景
准备在读取一个网络地址,获取页面的html标签结构和内容。找到一些方法,是通过读取```http.Get(testUrl) ``` resp *Response 的内容```resp.Body ```再使用```net/html```库进行读取分析。第一次获取title 标签,第二次获取某个a 标签,但是第二次无法读到资源。
原因
猜测指针在遍历时指向了结束,或许在一次读写后关闭了资源。
实际上要追根溯源 resp.Body 的Body 是```Body io.ReadCloser``` 而ReadCloser是一个接口
```js
// ReadCloser is the interface that groups the basic Read and Close methods.
type ReadCloser interface {
Reader
Closer
}
```
解决
通过"io/ioutil" 读取后创建多个副本来进行读取
```js
func main(){
resp, err := http.Get(testUrl)
if err != nil {
fmt.Println("errr--------")
}
defer resp.Body.Close()
b, err := ioutil.ReadAll(resp.Body)
//读取
if err !=nil{
panic(err)
}
//创建一个
reader := bytes.NewReader(b)
//创建第二个
readerTitle := bytes.NewReader(b)
videoSrc = alink.href(reader)
title = alink.Title(readerTitle)
...
}
```