惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

T
Tailwind CSS Blog
大猫的无限游戏
大猫的无限游戏
L
LINUX DO - 热门话题
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
雷峰网
雷峰网
aimingoo的专栏
aimingoo的专栏
博客园_首页
MongoDB | Blog
MongoDB | Blog
V
V2EX
GbyAI
GbyAI
量子位
Microsoft Azure Blog
Microsoft Azure Blog
有赞技术团队
有赞技术团队
G
Google Developers Blog
云风的 BLOG
云风的 BLOG
B
Blog
Microsoft Security Blog
Microsoft Security Blog
S
SegmentFault 最新的问题
O
OpenAI News
N
News and Events Feed by Topic
博客园 - Franky
爱范儿
爱范儿
Forbes - Security
Forbes - Security
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
V2EX - 技术
V2EX - 技术
Application and Cybersecurity Blog
Application and Cybersecurity Blog
N
News and Events Feed by Topic
N
News | PayPal Newsroom
Schneier on Security
Schneier on Security
Cloudbric
Cloudbric
Security Archives - TechRepublic
Security Archives - TechRepublic
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
Recent Commits to openclaw:main
Recent Commits to openclaw:main
人人都是产品经理
人人都是产品经理
P
Privacy International News Feed
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
B
Blog RSS Feed
阮一峰的网络日志
阮一峰的网络日志
D
DataBreaches.Net
Last Week in AI
Last Week in AI
罗磊的独立博客
Spread Privacy
Spread Privacy
Recent Announcements
Recent Announcements
The Cloudflare Blog
Google DeepMind News
Google DeepMind News
AWS News Blog
AWS News Blog
The Register - Security
The Register - Security
Y
Y Combinator Blog
J
Java Code Geeks
I
Intezer

Chenxu's Blog

RAG检索优化:从 68% 到 82.2% 学习深度学习 北邮计算机研究生选课指北 学习机器学习 上海篇 提出一个好问题 写代码的环境 选购一台合适的设备 计算机的第零课 序言 内蒙古篇 山东篇 一篇对transformers的疑惑 浅析GPUStack 浅谈后端项目分层 浙江篇 河南篇 一些三端协同的开发工具记录 浅谈编程语言中的 GC 在 Windows 上安装 Rust 美化博客 消息队列 MyBatis 现代交换原理2024年题目 回忆版 北邮计科本科课程指北 ClkLog埋点用户分析系统研究报告 大数据梧桐实验分享 大数据HBase实验分享 国产向量数据库研究实践 —— 基于 Milvus 的电影推荐系统 服务器环境配置 大数据HDFS实验分享 SSE多服务之间推送数据 数据库系统原理 操作系统 编译原理 手把手教你gozero从开发到部署 (番外篇): 介绍 gtodolist 前端项目 天津篇 北京篇 手把手教你gozero从开发到部署 (5): gtodolist 之任务的删除 前端相关问题 vue3 + element-plus学习 git相关命令 人工智能原理 使用 MongoTemplate 时开启事务 MySQL Redis 力扣刷题笔记之动态规划 记录一次 VSCode 出现的各种奇怪的问题 手把手教你gozero从开发到部署 (4): 在 model 中自己编写函数实现数据库分页查询 记录平时用到的 windows 右键管理 记录平时使用的 linux 的指令 安装 gstore 并使用 java api 手把手教你gozero从开发到部署 (3): gtodolist 之任务的创建和修改 手把手教你gozero从开发到部署 (番外篇): 记录第一次部署 CI/CD 的流程 记录完成 gtodolist 中遇到的 bug 手把手教你gozero从开发到部署 (2): gtodolist 之 user 模块开发 快速入门 gozero 框架 vue部署在nginx上的相关问题 记一次安装scrapy的报错 将博客部署至服务器 Java CS143: Compliers 《MySQL必知必会》读书笔记(2) 初识 GORM 初识 gin 框架 Spring 《MySQL必知必会》读书笔记(1) 本地搭建博客 🤝友链 🙋🏻‍♂️关于 Browser and Device Check
手把手教你gozero从开发到部署 (1): gtodolist 项目说明和环境准备
Chenxu · 2023-08-30 · via Chenxu's Blog

声明: 若博客中代码与 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 模块的编写