最早开始学 Golang 已经是整整一年前了,当时就把基础语法那一块学完了,然后拿 Golang 写了点 leetcode 题。之后由于项目里一直用 Python 和 Java,Golang 这一块就搁置下来没学了。
之前寒假本来是打算学 iOS、Mac 开发这一块的,搞了两个星期,感觉暂时不想学下去了。(我想学 SwiftUI,我觉得这才够酷,但我不想拿赖以生存的老 Macbook 尝试 Catalina,Mojave 写 SwiftUI 没有及时预览,感觉没有灵魂了。)
所以就搬出 Golang 来接着学了。看完了函数、接口、并发这一块,然后就学了一些 Web 开发方面的。(这才实在,不然语言学完就只能刷 leetcode。)
学完了差不多就开学了,刚好我一直憎恶超级课程表广告的烦扰,所以就打算写一个可以自动从教务系统获取课程表、在上课前提醒的课程表项目。这个照理来说是个前端项目,但 iOS 开发这一块还没学完。本来 Android 也行,但我用 iPhone 啊。所以想了个曲线救国的方法——微信公众号开发,纯后端,拿来练习 Golang 再好不过。
由于时间、空间有限很多地方我写的不太清晰。所以在开始阅读本文之前,我建议你打开源码,对照阅读。:https://github.com/cdfmlr/CoursesNotifier。
我在这个项目中的很多地方尝试了 Golang 的“面向对象”。Go 不是一个面向对象的语言,这给写惯了 Java、Python 的我们还是带来了一些不适应的。但没关系,正如它的发明者们所说,Go 是用来构建系统的实用语言。面向对象不可否认是构建系统的强有力工具,Golang 当然会有所支持。当然,也只是有所支持,而不是真正的面向对象,我在 coding 的时候,就在一个需要多态的地方碰到了困难,最后不得不更改设计,稍微没那么优雅了。
在这篇文章中,我尝试记录我开发这个系统的整个过程、解释尽可能多的代码设计。但因为毕竟整个项目有接近3000行代码,我不可能逐一解释到位。如果你想看懂所有东西,请去 GitHub 打开这个项目的源码对照来看,我也是个初学者,写出的代码应该还是很简单的。
另外,这篇文章不是 Golang 的入门,在开始阅读前请确保你掌握了(起码是有所了解)以下技能:
- Go语言基础:A Tour of Go :全部内容;
- Go语言Web开发基础:astaxie/build-web-application-with-golang :1~7章;
- 微信公众号开发基础:微信公众号入门指引 :1、2、4节;
我的目的很明确,就是做一个微信公众号系统,在上课前发个通知提醒快上课了。但我不想手动输入课程信息,不然 iDaily Corp 开发的《课程表·ClassTable》就已经很好了。
所以还需要自动从教务系统获取课程表,学校用的新教务系统是:
嗯,我研究了一下,他这个web端反爬虫还是做的不错的,可以爬,但不好爬!那我们怎么搞到课表?
还好我发现了这个项目:TLingC/QZAPI。这位大佬爬了强智的 App,抓出了这公司的 API。可以直接调用这个接口获取课表了:
这个 API 文档做的挺好,无可挑剔;但这个 API 着实很恶心,看看他返回的课表:
这就是我们“领先的教学一体化平台”——强(ruo)智教务系统!
我找不到一个合适的、不带个人感情色彩的词语来客观公正地评价这个设计。不管了,也只能将就着用了。
肿的来说,我们的系统有两方面:
- 一个是输入(I):自动从教务系统获取课表;
- 还有是输出(O):自动提醒学生上课。
接下来我们就一步一步把这个系统实现:
数据库
首先是数据库设计。
本来写这东西 MongoDB 用挺方便的,但这学期有数据库课嘛,肯定不学这些 NoSQL,所以还是复习一下 SQL,用一下关系型数据库。
其实这个东西挺传统啊,就是数据库书上的例子嘛,主要就三个表:
- 一个 Student 表,存学号、微信号(公众号里的openid)还有教务密码(这个可以不存的,存了还不安全,我不知道我设计的时候是怎么想的,后悔了,但懒得改 以上就是本篇文章【Golang 实战——微信公众号课程提醒系统】的全部内容了,欢迎阅览 ! 文章地址:http://w.yusign.com/quote/593.html 行业 资讯 企业新闻 行情 企业黄页 同类资讯 网站地图 返回首页 述古往 http://w.yusign.com/mobile/ , 查看更多