首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

一个Go项目之:RSS匹配器搜索

Jeremyyip的Go语言学习系列

目的

通过这个项目,了解go语言的使用和功能:

一个程序的框架、执行流程;

go并发goroutine应用;

通道channel应用;

接口interface应用;

主旨并不是阅读弄懂代码,而是理解一个程序的概念和流程;代码讲解一时三刻也不是具体搞清楚,只作为一个入门前的感性认识,大概了解一下即可,待以后真的感兴趣开始学习Go语言后,可以回过来再仔细体会代码的内容;另外这里省略去概念的讲解,但是,需要大家去寻找和结合概念去理解。

应用实现

具体使用方法可以查考文章 “RSS网址匹配器搜索使用说明”。

代码已上传Git:https://github.com/YJeremy/RssFeed

技术实现

这个程序分有多个并发goroutine,在多个不同的goroutine里运行。从开始,一直执行到和,最后回到,程序结束。

代码文件夹路径结构

在scr文件夹里,如下:

src

main.go(main包)

上述代码还有一个包“matchers”没有用到,但是它前面有一个“_”号,表示自动使用该包里面的init函数;go语言里,若编译时候发现有多余的包没有使用,程序会报错;因此用“_”能够减低这个错误。

整个main函数包含程序核心业务逻辑,调用了search包的Run函数,需要传入一个字符串作为搜索项。一旦Run函数退出,程序就会终止。

每个init函数都会在main函数执行前调用。

search包

search.go

每个文件都以package关键字开头,随后跟包的名字。文件夹search下的每个代码文件都使用search作为包名。

代码标准库里的log和sync包。

编译器查找包总是会到GOROOT和GOPATH环境变量的位置查找。

match.go

函数func Match 、func Display 是因为 类型Result在这里定义;

实现 Matcher 接口定义;

函数Match实际是调用了Matcher接口方法,并对Result的处理统一存入通道处理;

Result参数由调用者在外部声明后调入;作为通道类型的参数处理方式;

feed.go

实现把我们准备好的JSON文件,进行解码。

JSON是一种文档格式,类似常见的txt、word、pdf,也是一种文件。

解码,类似word文档转pdf文档一样,我们JSON格式也要转成能够让Go语言读懂的格式。

为什么要有JSON格式?因为这是在众多编程语言中,约定的一种通用格式“之一”。另外还有xml格式等,都是用来存储信息用的。每种编程语言因此都有专门的解码函数,Go里的标准库就有 encoding/json 包,借来使用就好了。

default.go

实现一个默认匹配器,其实是一个空的匹配器。

只要满足接口的方法,该变量即可成为该接口类型。

方法内容不做要求,这里就全为空值;能让程序顺利执行下去,只不过并没有结果输出。

注意关于默认的变量设计。

matchers包

用于存放各种匹配器的包。

目前只有一种,即RSS匹配器,对应的是rss.go。

我们的Data文件夹里面的JSON文件,存放的网址也全是RSS类型的。

只要通过自动判断对应类型的网址,调用对应的匹配器,即可实现关键词查找、解析。

rss.go

rss类型的格式是按照xml格式保存的

rss的网址有固定的结构,因为我们比较容解析

类似上面feed.go里JSON文件的解码

类似上面的default 实现matcher接口

只是这里新增加从网上URL下载的功能。

下载->解码->查找文件中关键字->存入结果

既然只是实现match的方法和结果result的存入,那么matchers的本身类型并不重要,所以defualtMatcher、rssMatcher就使可自定义的结构类型struct,并且为空就可以了。

(完)

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180726G1SPN700?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券