-
Go语言表达式求值器
所属栏目:[大数据] 日期:2020-12-16 热度:130
在本节中,我们将创建简单算术表达式的一个求值器。我们将使用一个接口 Expr 来代表这种语言中的任意一个表达式。现在,这个接口没有任何方法,但稍后我们会逐个添加。 // Expr:算术表达式 type Expr interface{} 我们的表达式语言包括浮点数字面量,二元操[详细]
-
Go语言使用类型断言来识别错误
所属栏目:[大数据] 日期:2020-12-16 热度:173
考虑一下 OS 包中的文件操作返回的错误集合,I/O 会因为很多原因失败,但有三类原因通常必须单独处理:文件已存储(创建操作),文件没找到(读取操作)以及权限不足。OS 包提供了三个帮助函数用来对错误进行分类: package os func IsExist(err error) bool[详细]
-
Go语言网络爬虫组件注册器
所属栏目:[大数据] 日期:2020-12-16 热度:192
在讲解下载器接口设计时,我们介绍过组件注册方面的设计和组件注册器接口 Registrar,它声明在 module 包中。根据前面的接口描述,我们会让组件注册器按照类型存储已注册的组件。该接口的声明如下: //细件注册器的实现类型type myRegistrar struct { //组件[详细]
-
Go语言网络爬虫分析器接口
所属栏目:[大数据] 日期:2020-12-16 热度:80
分析器的接口包含两个额外的方法 RespParsers 和 Analyze,其中前者会返回当前分析器使用的 HTTP 响应解析函数(以下简称解析函数)的列表因此,分析器的实现类型有用于存储此列表的字段。另外,与下载器的实现类型相同,它也有一个 stub.ModuleInternal 类型[详细]
-
示例:并发时钟服务器
所属栏目:[大数据] 日期:2020-12-16 热度:184
网络是一个自然使用并发的领域,因为服务器通常一次处理很多来自客户端的连接,每一个客户端通常和其他客户端保持独立。本节介绍 net 包,它提供构建客户端和服务器程序的组件,这些程序通过 TCP、UDP 或者 UNIX 套接字进行通信。net/http 包就是在 net 包基[详细]
-
Go语言网络爬虫下载器接口
所属栏目:[大数据] 日期:2020-12-16 热度:183
与 ModuleInternal 接口一样,下载器接口 Downloader 也内嵌了 Module 接口,它额外声明了一个 Download 方法。有了 ModuleInternal 接口及其实现类型,实现下载器时只需关注它的特色功能,其他的都交给内嵌的 stub.ModuleInternal 就可以了。 下载器的实现类[详细]
-
Go语言网络爬虫调度器的实现
所属栏目:[大数据] 日期:2020-12-16 热度:161
调度器的主要职责是对各个处理模块进行调度,以使它们能够进行良好的协作并共同完成整个爬取流程。调度器相关的实现代码都在 gopcp.v2/chapter6/webcrawler/scheduler 包中。相关代码可以从网盘中下载(链接:https://pan.baidu.com/s/1yzWHnK1t2jLDIcTPFMLPC[详细]
-
Go语言router请求路由
所属栏目:[大数据] 日期:2020-12-16 热度:98
在常见的 Web 框架中,router 是必备的组件。Go语言圈子里 router 也时常被称为 http 的 multiplexer。通过前面几节的学习,我们已经知道了如何用 http 标准库中内置的 mux 来完成简单的路由功能了。如果开发 Web 系统对路径中带参数没什么兴趣的话,用 http[详细]
-
Go语言网络爬虫内部基础接口
所属栏目:[大数据] 日期:2020-12-16 热度:160
首先要做的是,先为组件通用功能定义一个内部接口,这里把它叫做组件的内部基础接口。内部基础接口及其实现类型存放在了代码包 gopcp.v2/chapter6/webcrawler/module/stub 中,代码包可以在我的网盘中下载(链接:https://pan.baidu.com/s/1yzWHnK1t2jLDIcTPF[详细]
-
Go语言接口与动态类型
所属栏目:[大数据] 日期:2020-12-16 热度:181
在经典的面向对象语言(像 C++,Java 和 C#)中数据和方法被封装为类的概念:类包含它们两者,并且不能剥离。 Go语言没有类:数据(结构体或更一般的类型)和方法是一种松耦合的正交关系。 Go语言中的接口跟 Java/C# 类似:都是必须提供一个指定方法集的实现[详细]
-
Go语言网络爬虫条目处理管道
所属栏目:[大数据] 日期:2020-12-16 热度:87
条目处理管道的接口拥有额外的 ItemProcessors、Send、FailFast 和 SetFailFast 方法,因此其实现类型 myPipeline 的基本结构是这样的: //条目处理管道的实现类型type myPipeline struct { //组件基础实例 stub.ModuleInternal //条目处理器的列表 itemProce[详细]
-
Go语言类型强制转换
所属栏目:[大数据] 日期:2020-12-16 热度:112
由于 Go语言是强类型的语言,如果不满足自动转换的条件,则必须进行强制类型转换。任意两个不相干的类型如果进行强制转换,则必须符合一定的规则。 强制类型的语法格式: var a T = (T) (b) ,使用括号将类型和要转换的变量或表达式的值括起来。 非常量类型的[详细]
-
Go语言数据库(Database)相关操作
所属栏目:[大数据] 日期:2020-12-16 热度:87
本节将对 db/sql 官方标准库作一些简单分析,并介绍一些应用比较广泛的开源 ORM 和 SQL Builder。并从企业级应用开发和公司架构的角度来分析哪种技术栈对于现代的企业级应用更为合适。 从 database/sql 讲起 Go语言官方提供了 database/sql 包来给用户进行和[详细]
-
Go语言爬取图片小程序
所属栏目:[大数据] 日期:2020-12-16 热度:154
在本节中,我们的主要任务是使用网络爬虫框架编写一个可以下载目标网站中链接图片的爬虫程序。在这个过程中,我们会发现网络爬虫框架的一些不足,并继续为之添砖加瓦。这是一种反哺。在软件开发的过程中,总是应该尽早地为程序编写使用示例(测试程序也可以视[详细]
-
Go语言网络爬虫缓冲器工具的实现
所属栏目:[大数据] 日期:2020-12-16 热度:108
缓冲器的基本结构如下: //集冲器接口的实现类型type myBuffer struet { //存放数据的通道 ch chan interface{} //缓冲器的关闭状态:0-未关闭;2-已关闭 closed uint32 //为了消除因关闭缓冲器而产生的竞态条件的读写锁 closingLock sync.RWMutex} 显然,缓[详细]
-
Go语言网络爬虫中的基本数据结构
所属栏目:[大数据] 日期:2020-12-16 热度:135
为了承载和封装数据,需要先声明一些基本的数据结构。网络爬虫框架中的各个模块都会用到这些数据结构,所以可以说它们是这一程序的基[详细]
-
使用源码安装Go语言
所属栏目:[大数据] 日期:2020-12-16 热度:116
在Go语言的源代码中,有些部分是用 Plan 9 C 和 ATT 汇编写的,因此假如你要想从源码安装,就必须安装 C 的编译工具。 在 Mac 系统中,只要你安装了 Xcode,就已经包含了相应的编译工具。 在类 Unix 系统中,需要安装 gcc 等工具。例如 Ubuntu 系统可通过在终[详细]
-
Go语言session的创建和管理
所属栏目:[大数据] 日期:2020-12-16 热度:131
前面《Cookie设置与读[详细]
-
Go语言Ratelimit服务流量限制
所属栏目:[大数据] 日期:2020-12-16 热度:163
计算机程序可依据其瓶颈分为磁盘 IO 瓶颈型,CPU 计算瓶颈型,?络带宽瓶颈型,分布式场景下有时候也会外部系统?导致?身瓶颈。 Web 系统打交道最多的是?络,?论是接收,解析?户请求,访问存储,还是把响应数据返回给?户,都是要??络的。在没有 epoll/kqueue 之[详细]
-
Go语言常见大型Web项目分层(MVC架构)
所属栏目:[大数据] 日期:2020-12-16 热度:52
流行的 Web 框架大多数是 MVC 框架,MVC 这个概念最早由 Trygve Reenskaug 在 1978 年提出,为了能够对 GUI 类型的应用进行方便扩展,将程序划分为: 控制器(Controller):负责转发请求,对请求进行处理。 视图(View):界面设计人员进行图形界面设计。 模[详细]
-
Go语言Cookie的设置与读取
所属栏目:[大数据] 日期:2020-12-16 热度:69
Web 开发中一个很重要的议题就是如何做好用户整个浏览过程的控制,因为 HTTP 协议是无状态的,所以用户的每一次请求都是无状态的,不知道在整个 Web?操作过程中哪些连接与该用户有关。应该如何来解决这个问题呢?Web 里面经典的解决方案是 Cookie 和 Session[详细]
-
Go语言使用定时器实现任务队列
所属栏目:[大数据] 日期:2020-12-16 热度:66
Go语言中提供了两种定时器 timer 和 ticker,分别是一次性定时器和重复任务定时器。本节咱们主要介绍如何使用Go语言的定时器实现一个任务队列,非常具有实用价值。 Go语言中定时器 一般用法: package mainimport( "fmt" "time")func main() { input := make([详细]
-
Go语言简单的统计函数
所属栏目:[大数据] 日期:2020-12-16 热度:164
本节中我们定义了一个聚合类型的结构体,包含用户输入的数据以及我们准备计算的两种统计: type statistics struct { ??? numbers? []float64 ??? mean???? float64 ??? mdian??? float64 } Go语言里的结构体类似于C语言里的结构体或者 Java 里只有 public 数[详细]
-
Go语言TCP网络程序设计
所属栏目:[大数据] 日期:2020-12-16 热度:200
TCP 工作在网络的传输层,它属于一种面向连接的可靠的通信协议。TCP 网络程序设计属于 C-S 模式,一般要设计一个服务器程序,一个或多个客户机程序。另外,TCP 是面向连接的通信协议,所以客户机要和服务器进行通信,首先要在通信双方之间建立通信连接。本节[详细]
-
Go语言获取IP地址和域名解析
所属栏目:[大数据] 日期:2020-12-16 热度:145
主机地址是网络通信最重要的数据之一,net 包中定义了三种类型的主机地址数据类型:IP、IPMask 和 IPAddr,它们分别用来存储协议相关的网络地址。 IP 地址类型 在 net 包中,IP 地址类型被定义成一个 byte 型数组,即若干个 8 位组,格式如下: type IP []byt[详细]
