新建项目

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

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

源码仓库

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

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

项目结构

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

/
├── app
│   ├── api
│   ├── model
│   └── service
├── boot
├── config
├── docfile
├── library
├── public
├── router
├── template
├── vendor
├── go.mod
└── 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`

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

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