下面是编程之家 jb51.cc 通过网络收集整理的代码片段。
编程之家小编现在分享给大家,也给大家做个参考。
package main import ( "fmt" ) type Fetcher interface { // Fetch 返回 URL 的 body 内容,并且将在这个页面上找到的 URL 放到一个 slice 中。 Fetch(url string) (body string,urls []string,err error) } // Crawl 使用 fetcher 从某个 URL 开始递归的爬取页面,直到达到最大深度。 func Crawl(url string,depth int,fetcher Fetcher) { // TODO: 并行的抓取 URL。 // TODO: 不重复抓取页面。 // 下面并没有实现上面两种情况: if depth <= 0 { return } body,urls,err := fetcher.Fetch(url) if err != nil { fmt.Println(err) return } fmt.Printf("found: %s %q\n",url,body) for _,u := range urls { Crawl(u,depth-1,fetcher) } return } func main() { Crawl("http://golang.org/",4,fetcher) } // fakeFetcher 是返回若干结果的 Fetcher。 type fakeFetcher map[string]*fakeResult type fakeResult struct { body string urls []string } func (f *fakeFetcher) Fetch(url string) (string,[]string,error) { if res,ok := (*f)[url]; ok { return res.body,res.urls,nil } return "",nil,fmt.Errorf("not found: %s",url) } // fetcher 是填充后的 fakeFetcher。 var fetcher = &fakeFetcher{ "http://golang.org/": &fakeResult{ "The Go Programming Language",[]string{ "http://golang.org/pkg/","http://golang.org/cmd/",},"http://golang.org/pkg/": &fakeResult{ "Packages",[]string{ "http://golang.org/","http://golang.org/pkg/fmt/","http://golang.org/pkg/os/","http://golang.org/pkg/fmt/": &fakeResult{ "Package fmt","http://golang.org/pkg/","http://golang.org/pkg/os/": &fakeResult{ "Package os",}
以上是编程之家(jb51.cc)为你收集整理的全部代码内容,希望文章能够帮你解决所遇到的程序开发问题。
如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。