单机版爬虫 函数运用传参问题
来源: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里面会相应组装。流程的话:
通过第一个Url,就是main.go里面写的那个,获得网页内容
通过main.go配置的相对于这个Url的Parser,生成新的一批Request,各自打包了各自的Url和对应的Parser
engine收到这批Request,分发给Worker
Worker处理收到的Request,处理方法是:访问里面的这个Url,获取内容,用Request里面打包的Parser解析,生成新的一批Request,再送给engine,一直循环下去。
这是我一个大局上的整理,欢迎进一步讨论。
10 -
慕田峪0338756
提问者
2020-06-17
ccmouse老师我们用函数式编程的话,应该最先从什么地方入手啊
00
相似问题