单机版爬虫 函数运用传参问题

来源:15-5 Engine 与 Parser

慕田峪0338756

2020-06-17

ccmouse老师,我最近一直盯着15章看,在15-5这节,有点看不懂engine/types.go跟engine/engine.go,能详细讲解一下它们的运行流程吗

写回答

2回答

ccmouse

2020-06-17

关于函数式编程:

7-1: 理解前一半adder的作用及工作原理。后面adder2部分比较复杂,可以先跳过。

7-2: 前半部分:利用函数式编程实现斐波那契数列。后半部分,演示了函数类型作为一等公民,和struct有着相同的地位。既然struct能实现接口,函数也能实现接口。

7-3: 函数式编程真正的应用场景。这几个例子使用了函数式编程后非常清晰。

然后这里实战项目中,函数式编程被运用到。

我们的request是一个结构。他有两个字段,一个是Url,string类型,一个是ParserFunc,他的类型也叫ParserFunc(同名,不过完全没有什么关系),这个ParserFunc是一个自定义类型,什么类型呢,函数类型,函数就要有参数和返回值定义,因此有:

type ParserFunc func(contents []byte, url string) ParseResult

既然这样,我们对于r Request,就可以:

  • 通过r.Url获取这个Request的Url

  • 通过r.ParserFunc(...)就可以调用这个Request所对应的解析器。

每个Request的解析器不一定一样,这个在各个Parser里面会相应组装。流程的话:

  1. 通过第一个Url,就是main.go里面写的那个,获得网页内容

  2. 通过main.go配置的相对于这个Url的Parser,生成新的一批Request,各自打包了各自的Url和对应的Parser

  3. engine收到这批Request,分发给Worker

  4. Worker处理收到的Request,处理方法是:访问里面的这个Url,获取内容,用Request里面打包的Parser解析,生成新的一批Request,再送给engine,一直循环下去。

这是我一个大局上的整理,欢迎进一步讨论。

1
0

慕田峪0338756

提问者

2020-06-17

ccmouse老师我们用函数式编程的话,应该最先从什么地方入手啊

0
0

Google资深工程师深度讲解Go语言 由浅入深掌握Go语言

语法+分布式爬虫实战 为转型工程师量身打造

5995 学习 · 1909 问题

查看课程