使用 Golang 实现,调试网站缓存。(Go 语言圣经书后习题 1.10)
找一个数据量比较大的网站,用本小节中的程序调研网站的缓存策略,对每个 URL 执行两遍请求,查看两次时间是否有较大的差别,并且每次获取到的响应内容是否一致,修改本节中的程序,将响应结果输出,以便于进行对比。
我们直接使用程序对测试网站发送 http 请求,然后每次请求的时间即可。
package main
import (
"fmt"
"io"
"io/ioutil"
"net/http"
"os"
"time"
)
func main() {
fmt.Println("嗨客网(www.haicoder.net)")
start := time.Now()
ch := make(chan string)
for _, url := range os.Args[1:] {
go fetch(url, ch)
go fetch(url, ch)
}
for range os.Args[1:] {
fmt.Println(<-ch)
fmt.Println(<-ch)
}
fmt.Printf("%.2fs elapsed\n", time.Since(start).Seconds())
}
func fetch(url string, ch chan<- string) {
start := time.Now()
resp, err := http.Get(url)
if err != nil {
ch <- fmt.Sprint(err)
return
}
nbytes, err := io.Copy(ioutil.Discard, resp.Body)
if err != nil {
ch <- fmt.Sprint("while reading %s: %v", url, err)
return
}
secs := time.Since(start).Seconds()
ch <- fmt.Sprintf("%.2fs %7d %s", secs, nbytes, url)
}
我们输入以下命令行,开始运行程序:
go run haicoder.go http://www.haicoder.net
程序运行后,控制台输出如下:
我们可以看到,我们的程序输出了两次请求的时长,都输出了 0.19s。