之前写了两篇golang开发入门文章,太过潦草,赶着10.1 放假的前夕,想着还是要认真对待自己写的东西,记录学习的点滴,以后也许会忘了现在学习的东西,但是好歹留下一些文字,同时也希望能给花时间读我博客的人真正有些帮助。
前期准备
因为golang 之前断断续续学过一点,所以现在就以开发一个用户管理这样简单的功能入手。如果你现在在看我的这篇文章,你需要要具备以下知识点
- 1、golang 开发环境搭建
- 2、golang 的基本语法
- 3、面向对象和mvc开发思想
搭建项目
我使用eclipse作为开发工具,项目目录按照传统的mvc分层思想进行构建,结构如下:
src
domain -- 领域,其实就是用struct来表示一些对象
store -- 存储层,主要操作数据库
web -- 接口层,对外提供访问接口
main.go -- 入口类
细心的朋友可能已经发现了,上面的结构少了业务层,这是因为刚开始我的用户管理只是简单的CRUD(增删改查)操作,没有复杂的逻辑,之后如果涉及更复杂的业务,会再添加业务处理层。我已经将代码上传到了github上,你可以点击hiuser访问,在项目src/v1.0.learn 目录下可以看到本篇文章涉及的所有代码,如果你发现了代码有任何不合理的地方,欢迎向我提出,在此先行谢过。
需求与设计
我假设的需求场景是这样的:现在有一个在线的文件浏览系统,这个系统不会有太多的使用用户,它的功能主要就是将服务器本地的一个文件目录映射到网络上,不同的用户登录后,都给他在目录下分配一个子目录,用户在这个子目录上可以上传下载文件,起到了一个简易的网盘作用。golang实际上有一个非常不错的开源项目已经实现了上述的需求,而且功能更加强大,它就是filebrower,本篇文章以及后续的更新,也是参考这个项目来学习的。
本章并不考虑需求中文件相关的部分,而是单独来看用户,首先这个系统会有一个管理员,他至少应该具有以下功能:
- 1、他能能够创建其他人员,并且给他指定文件子目录;
- 2、他能够查询所有人员及人员对应的目录;
- 3、他可以修改人员对应的子目录;
- 4、他可以删除人员;
不管是管理员还是普通用户,都应该可以:
- 5、登录系统;
- 6、登录后修改密码;
根据上述的几点需求,来设计一套restful接口,关于登录会在之后的文章中进行完善,本章实现用户的CRUD操作。详细的设计文档,可以到github上查看,地址:接口文档
开发实现
本系列使用boltdb数据库来存储用户的信息,关于boltdb的使用,我将在下一章中详细介绍;而对于接口的实现,先不使用任何框架,直接使用golang自带的http模块。
定义用户
在domain目录下新建个users.go文件,该文件来定义用户的详细信息;
// 用户实体
type User struct {
// 主键
Id int `json:"id"`
Login string `json:"login"`
// 用户登录名
Name string `json:"name"`
// 登录密码
Password string `json:"-"`
Path string `json:"path"`
}
通过golang的struct(结构体)来定义用户对象,字段后面json:xxx
标签的目的是自定义json序列化之后如何展示,通过json:login
标识后最终接口返回的字段名称将会是login而不是默认的Login;通过添加json:"-"
,接口将不会将密码也一块返回。
存储层