公司最近在搞go语言学习小组,于是3个人一起组队,做了一个简单的签到系统, 见链接:
https://github.com/suoluoji/signIn
0.模块组成
db模块、go-server模块,html文件模, 二维码制作
db模块负责和数据库的交互,封装起来,做一些简单的insert/update工作
go-server模块:本来想用https://github.com/go-martini/martini 这样的web框架,组内人有不同意见,于是保留
html文件模块:一些页面相关的东西在里面
说明:这个里面有很多东西可以改进的地方那个,比如db从配置文件中读取,而不应该写在代码中;webserver模块的性能测试,可以看看go的web性能;db模块可以封装的更好点等等,后续在慢慢改进吧
1. db模块介绍
1.1 db driver选择
go相对与其它语言的,感觉driver模块并不是特别成熟,许士伟在《go语言编程》中说七牛的整体框架都基于go搭建的,真希望有天他们能开源出来,哈哈,题外话,暂时略过。
在mymysql与go-mysql-driver性能比较这篇文章中详细比较了几个方面,可以看出go-mysql-dirver的对于使用者并不是特别的友好(自我感觉),主要一点就是select的scan操作比较繁琐,这点mymysql的查询结果直接支持map操作要好很多,当然,最后还是选择了go-sql-driver,受这篇文章影响较多,下来可以详细研究下两者的实现方式,在做具体的分析
1.2 代码介绍及pkg的封装
在dao中定义了一个UserInfo的struct,有Username, Phone, Id,这里之所以大写研究过go的应该清楚,如果struct中的变量名是小写开头的,在模块外是例外,当然test不算的;
同行做了一个简单的封装,把*sql.DB隐藏在UserDB中,在模块外是不可见的。
为了测试这个模块,引入了testing的功能,对GetUser/SaveUser/SaveSigninLog几个功能做了简单的测试,事实证明,函数确实有点小的问题, dao_test..go代码如下:
封装的pkg的几个步骤如下:
go build dao go test dao go install dao
这样,在我们的pkg目录下就会发现有dao.a文件生成(这点真是麻烦。吐槽一下 。
更新了好久竟然没有更新完毕,好吧,最近比较忙,今天又要开始使用celery了,去了解下rabbitmq 和redis的一些使用吧
有疑问加站长微信联系(非本文作者)