我们使用gf框架来创建一个简单的API服务项目,该项目实现以下几个示例接口:

  1. 用户注册
  2. 用户登录
  3. 用户注销
  4. 登录状态判断
  5. 账号/昵称唯一性校验

源码仓库

该示例项目的源代码仓库位于: https://github.com/gogf/gf-demos

各位可以通过《开始运行》章节末尾示例的curl命令行方式进行测试,也可以通过/docfile/postman目录的postman配置进行测试。

项目结构

推荐的Go业务型项目目录结构如下:

  1. /
  2. ├── app
  3. ├── api
  4. ├── model
  5. └── service
  6. ├── boot
  7. ├── config
  8. ├── docfile
  9. ├── library
  10. ├── public
  11. ├── router
  12. ├── template
  13. ├── vendor
  14. ├── go.mod
  15. └── main.go
目录/文件名称 说明 描述
app 业务逻辑层 所有的业务逻辑存放目录。
- api 业务接口 接收/解析用户输入参数的入口/接口层。
- model 数据模型 数据管理层,仅用于操作管理数据,如数据库操作。
- service 逻辑封装 业务逻辑封装层,实现特定的业务需求,可供不同的包调用。
boot 初始化包 用于项目初始化参数设置。
config 配置管理 所有的配置文件存放目录。
docfile 项目文档 DOC项目文档,如: 设计文档、脚本文件等等。
library 公共库包 公共的功能封装包,往往不包含业务需求实现。
public 静态目录 仅有该目录下的文件才能对外提供静态服务访问。
router 路由注册 用于路由统一的注册管理。
template 模板文件 MVC模板文件存放的目录。
vendor 第三方包 第三方依赖包存放目录(可选, 未来会被淘汰)。
go.mod 依赖管理 使用Go Module包管理的依赖描述文件。
main.go 入口文件 程序入口文件。

注意:如果需要提供静态服务,那么所有静态文件都需要存放到public目录下,仅有该目录下的静态文件才能被外部直接访问。不推荐将程序运行目录加入到静态服务中。

数据库设计

我们创建一个简单的用户表。

/docfile/sql/create.sql

  1. CREATE TABLE `user` (
  2. `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '用户ID',
  3. `passport` varchar(45) NOT NULL COMMENT '账号',
  4. `password` varchar(45) NOT NULL COMMENT '密码',
  5. `nickname` varchar(45) NOT NULL COMMENT '昵称',
  6. `create_time` timestamp NOT NULL COMMENT '创建时间/注册时间',
  7. PRIMARY KEY (`id`)
  8. ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

为简化示例项目的接口实现复杂度,这里的password没有做任何加密处理,明文存放密码数据。