最近做了什么
在已经了解goroutine, context, channel, database/sql, ants库这些东西的基础上,我决定自己写一个小东西锻炼一下Golang开发能力
What’s Hugofeeds?
一个rss订阅追踪网站,定时把rss feed更新内容推送到网站
目前核心部分基本完成,网站部分还未开始
核心主要是使用了一个定时的调度器,过一段时间就检测数据库里面的rss feed抓取时间有没有过期
如果过期就把该feed装填到workChannel,由work invoker取用
work invoker从channel里面得到一个feedwork之后,从ants pool里面取出一个goroutine用来完成这个feedwork
feedwork处理完成后,err从该任务的Done通道导出交给调度器处理
踩到的坑
-
channel一端导出的数据,如果另一端没有相应地导出,那么这个goroutine就会一直保持阻塞状态
-
database/sql有自己的格式化查询语句语法,不应该使用fmt的字符串格式化操作了
-
错误处理是Golang的一大核心,应该好好对待
学习到什么
-
基本的文档查询能力,看go package介绍
-
减少了项目开发对AI的依赖
-
Golang作为一门比较新的语言,对某些东西的处理方式比较新
-
借鉴Github上相似的项目,可以学到很多
-
项目结构设计是一个要学习的重要思想
-
找到了一个出色的学习项目:flowerss
ChatGPT told me
-
任务重试机制:如果任务执行失败,可以加入重试逻辑,防止网络抖动等临时问题导致的抓取失败。
-
动态调度间隔:根据任务负载,调度器可以采用动态调整抓取时间的策略,确保资源的最优利用。