Golang调试网站缓存

描述

使用 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

程序运行后,控制台输出如下:

08_go语言圣经习题1.10答案.png

我们可以看到,我们的程序输出了两次请求的时长,都输出了 0.19s。