声明: 若博客中代码与 github 中代码有出入, 请以 github 为准

项目说明

gtodolist 是一个带有前端页面的简易备忘录项目, 使用 gozero 框架开发, 帮助同学快速熟悉和入门 gozero 框架, 项目地址在这里

项目前端来自于 github todolist , 原作者使用 gin+gorm 完成后端开发, 笔者将使用 gozero 进行重构

环境准备

假设你已经安装好了 gozero 所需的所有环境, 如果没有, 请参考 快速入门 gozero 框架

项目结构

新建文件夹 gtodolist 作为项目目录, 使用 gomod 进行管理并添加到 gowork 中

此项目拟作为微服务项目并采用 git 进行版本管理, 所以目前创建目录如下:

D:\GOPROJECTS\SRC\GTODOLIST
│  go.mod    # mod依赖管理
│  README.md   # 自述文件
├─app   # 项目主目录
│  ├─task  # task 模块
│  │  ├─cmd   # 服务
│  │  │  ├─api
│  │  │  └─rpc
│  │  ├─model   # 数据库
│  │  └─template   # 模板文件
│  └─user   # user 模块
│      ├─cmd
│      │  ├─api
│      │  └─rpc
│      ├─model
│      └─template
└─common   # 通用的工具类等, 后面不再单另写出来

创建数据库

user 表:

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

DROP TABLE IF EXISTS `user`;
CREATE TABLE `user`
(
    `id`              bigint(20) UNSIGNED                                     NOT NULL AUTO_INCREMENT COMMENT '主键',
    `created_at`      timestamp                                               NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    `updated_at`      timestamp                                               NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    `deleted_at`      datetime(3)                                             NULL     DEFAULT NULL COMMENT '删除时间',
    `username`        varchar(191) CHARACTER SET utf8 COLLATE utf8_general_ci NULL     DEFAULT NULL COMMENT '用户名',
    `password_digest` longtext CHARACTER SET utf8 COLLATE utf8_general_ci     NULL COMMENT '密码',
    PRIMARY KEY (`id`) USING BTREE,
    UNIQUE INDEX `username` (`username`) USING BTREE,
    INDEX `idx_users_deleted_at` (`deleted_at`) USING BTREE
) ENGINE = InnoDB
  AUTO_INCREMENT = 1
  CHARACTER SET = utf8
  COLLATE = utf8_general_ci
  ROW_FORMAT = Dynamic;

SET FOREIGN_KEY_CHECKS = 1;

task 表:

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

DROP TABLE IF EXISTS `task`;
CREATE TABLE `task`
(
    `id`         bigint(20) UNSIGNED                                     NOT NULL AUTO_INCREMENT COMMENT '主键',
    `created_at` timestamp                                               NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    `updated_at` timestamp                                               NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    `deleted_at` datetime(3)                                             NULL     DEFAULT NULL COMMENT '删除时间',
    `uid`        bigint(20) UNSIGNED                                     NOT NULL COMMENT '用户id',
    `title`      varchar(191) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '任务标题',
    `status`     tinyint(20)                                             NOT NULL DEFAULT 0 COMMENT '任务状态 0代办 1已完成',
    `content`    longtext CHARACTER SET utf8 COLLATE utf8_general_ci     NULL COMMENT '任务内容',
    `start_time` timestamp                                               NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '任务开始时间',
    `end_time`   timestamp                                               NULL     DEFAULT NULL COMMENT '任务结束时间',
    PRIMARY KEY (`id`) USING BTREE,
    INDEX `idx_tasks_deleted_at` (`deleted_at`) USING BTREE,
    INDEX `idx_tasks_title` (`title`) USING BTREE,
    INDEX `idx_tasks_user` (`uid`) USING BTREE
) ENGINE = InnoDB
  AUTO_INCREMENT = 1
  CHARACTER SET = utf8
  COLLATE = utf8_general_ci
  ROW_FORMAT = Dynamic;

SET FOREIGN_KEY_CHECKS = 1;

准备工作结束, 下一部分将介绍 user 模块的编写