Searching...

[TOC]

我们使用gf框架来创建一个简单的API服务项目,该项目实现以下几个示例接口: 1. 用户注册 1. 用户登录 1. 用户注销 1. 登录状态判断 1. 账号/昵称唯一性校验

项目结构

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

/
├── app
│   ├── controller
│   ├── library
│   └── model
├── boot
├── config
├── docfile
├── public
├── router
├── template
├── vendor
├── go.mod
└── main.go
目录/文件名称 说明 描述
app 业务逻辑层 所有的业务逻辑存放目录。
- controller 控制器 接收/解析用户输入参数的入口/接口层。
- library 逻辑封装 公共的业务逻辑封装层,可供不同的包调用。
- model 数据模型 数据管理层,仅用于操作管理数据,如数据库操作。
boot 初始化包 用于项目初始化参数设置。
config 配置管理 所有的配置文件存放目录。
docfile 项目文档 DOC项目文档,如: 设计文档、脚本文件等等。
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没有做任何加密处理,明文存放密码数据。