基于Gin和GORM的在线判题系统后端

项目地址:基于Gin和GORM的在线判题系统后端

一、开发环境与API测试工具

开发环境

Go1.23,VSCode,Gin框架,GORM框架

gin-swagger

swagger是一个用于描述和文档化 RESTful API 的开源工具,它可以帮助开发者生成交互式文档,并且提供 API 的可视化测试功能。gin-swagger 使得在 Gin 框架中集成 Swagger 变得简单,提供了方便的 API 文档生成方式。通过注释或特定的标记(如 @Summary@Param 等),gin-swagger 可以根据代码中的注释自动生成 API 文档,使用方式详见gin-swagger。

二、数据库设计

category

字段名类型是否为空默认值注释
idintAUTO_INCREMENT主键
namevarchar(100)NULL-
parent_idint0父级ID
created_atdatetimeNULL-
updated_atdatetimeNULL-
deleted_atdatetimeNULL-

problem

字段名类型是否为空默认值注释
idintAUTO_INCREMENT主键
titlevarchar(100)NULL问题标题
contenttextNULL问题内容
max_runtimeintNULL最大运行时间
max_memintNULL最大运行内存
pass_numint0所有用户通过的次数
submit_numint0所有用户提交的次数
created_atdatetimeNULL-
updated_atdatetimeNULL-
deleted_atdatetimeNULL-
category_idint-外键

user

字段名类型是否为空默认值注释
idintAUTO_INCREMENT主键
namevarchar(100)NULL-
passwordvarchar(32)NULL-
phonevarchar(20)NULL-
mailvarchar(100)NULL-
pass_numint0通过问题数
submit_numint0总提交次数
is_admintinyint0是否是管理员【0-否,1-是】
created_atdatetimeNULL-
updated_atdatetimeNULL-
deleted_atdatetimeNULL-

submit

字段名类型是否为空默认值注释
idintAUTO_INCREMENT主键
code_pathvarchar(255)NULL-
statustinyint-1提交状态【-1-待判断,1-答案正确,2-答案错误,3-编译错误,4-运行错误,5-运行超时,6-运行超内存】
created_atdatetimeNULL-
updated_atdatetimeNULL-
deleted_atdatetimeNULL-
problem_idint-外键
user_idint-外键

test_case

字段名类型是否为空默认值注释
idintAUTO_INCREMENT主键
inputtextNULL-
outputtextNULL-
created_atdatetimeNULL-
updated_atdatetimeNULL-
deleted_atdatetimeNULL-
problem_idint-外键

三、系统模块与目录总体设计

系统模块

  • 公共模块:所有人能使用的模块,功能:查看分类列表,查看问题列表,查看提交列表,查看排名列表,查询问题,查询用户。
  • 用户模块:和用户相关的模块,功能:注册,登录,发送验证码,检测提交的代码。
  • 管理员模块:和管理员相关的模块,功能:创建问题,修改问题,创建分类,修改分类,删除分类,获取测试用例列表。
  • 安全模块:使用中间件验证用户或管理员身份。

目录结构

├─code
├─docs
├─middlewares
├─model
├─router
├─service
├─utils
└─main.go
  • code:存放用户提交的代码。
  • docs:gin-swagger项目文档。
  • middlewares:中间件模块,验证管理员或用户身份。
  • model:数据模型层,定义数据库表结构的实体映射,保持数据与数据库结构一致。
  • router:路由配置层,定义各请求路径和对应的处理函数,将请求正确地分配到相关业务逻辑。
  • service:服务层,包含核心业务逻辑的实现,调用其他模块完成具体的业务流程。
  • utils:工具库,封装所有业务层需要用到的公共函数或变量,例如格式转换、通用计算等。
  • 主函数:利用自动生成工具生成数据库表对应的结构体,调用路由配置层的函数。

四、邮箱授权码获取流程

邮箱授权码是由邮箱提供商生成并分配的,允许外部应用(比如你的程序)通过 SMTP 协议访问邮箱服务并发送邮件,以下以163邮箱为例,说明获取流程:

  1. 打开 163 邮箱官网 https://mail.163.com/,登录你的邮箱账号。
  2. 登录成功后,点击页面上方的 “设置”,选择**“POP3/SMTP/IMAP”**。
  3. 在**“开启服务”**选项中开启 “POP3/SMTP服务” 。开启后,系统会提示你需要设置一个 授权密码,按提示设置即可。

注意:授权码只生成一次,记得及时保存(保存到本地或发邮件给自己)。

五、补充说明

  1. 创建表和插入表的sql都放在sql目录下,提交代码的测试数据在“提交代码测试数据.md“中,但本系统目前未能实现对提交的代码进行内存检测功能,主要原因是子程序运行结束后会立即释放内存,仅靠在子程序运行前后获取内存状态是无效的,此功能有待完善。
  2. 本人使用了自己开发的工具包autosql,该包是基于GORM的GEN功能开发的,不仅能自动生成数据库表对应的结构体,还能自动生成外键字段。工具包地址:autosql。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/56839.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【C++】—— 模板进阶

【C】—— 模板进阶 1 非类型模板参数1.1 什么是非类型模板参数1.2 非类型模板参数对比宏的优势1.3 array 简单了解 2 模板的特化2.1 引子2.2 函数模板特化2.3 函数模板特化的坑2.4 类模板的特化2.4.1 全特化2.4.2 偏特化(半特化)2.4.3 选择2.4.4 偏特化…

Conda 安装与使用指南

Conda 是一个开源的软件包管理和环境管理系统,主要解决一个系统上同时要使用python2,python3等等多个python环境的切换问题,支持多种编程语言(如 Python、R 等),可以在 Windows、macOS 和 Linux 上运行。它…

Java最全面试题->Java基础面试题->JavaEE面试题->Web应用服务器面试题

文章目录 Web应用服务器面试题Tomcat是什么?Tomcat缺省端口是多少,如何修改?Tomcat 有那几种Connector 运行模式?什么是Servlet?Servlet请求过程?Tomcat执行流程?Tomcat部署方式?什么是JBoss ?在JBoss 7…

C++的const关键字

在 C 中,const 关键字用于声明常量,表示某个变量或对象的值在初始化后不可改变。const 可以应用于多种上下文,包括变量、函数参数、成员函数和指针等。下面详细介绍 const 的各种用法: 1. 常量变量 const 可以用来声明常量变量&…

FPGA搭建PCIE3.0通信架构简单读写测试,基于XDMA中断模式,提供3套工程源码和技术支持

目录 1、前言工程概述免责声明 2、相关方案推荐我已有的PCIE方案本博客方案的PCIE2.0版本 3、PCIE基础知识4、工程详细设计方案工程设计原理框图XDMA配置及使用XDMA中断模块数据缓存架构用户逻辑Windows版本XDMA驱动安装Linux版本XDMA驱动安装测试应用程序工程源码架构PCIE上板…

ICM20948 DMP代码详解(100)

接前一篇文章:ICM20948 DMP代码详解(99) 上一回解析到inv_set_hw_smplrt_dmp_odrs函数的以下代码片段: // switch between low power and low noise at 500Hz boundaryif (minDly != 0xFFFF) {// above 500Hz boundary, force LN modeif (minDly==1) {if (s->base_state…

实测体验Claude 3.5升级版:AI首次实现直接操控电脑!

前言 就在10月22日晚上,Anthropic发布重大升级,发布Claude 3.5 Sonnet和Claude 3.5 Haiku新版本。 新的 Claude 3.5 Sonnet 在所有指标上都优于其他模型,包括 OpenAI 的 GPT-4 和谷歌的 Gemini 1.5 Pro。 Claude 3.5 Haiku 与之前的顶级 C…

【C++开篇】

首先初阶的数据结构相信大家已经学习的差不多了,关于初阶数据结构排序的相关内容的总结随后我也会给大家分享出来。C语言和C有许多相同的地方,但也有许多不相同的地方。接下来的C部分,我们主要是针对C与C语言不同的地方来与大家进行分享。其中…

gin入门教程(7): 使用 Logrus + Lumberjack 创建日志中间件

结合 Logrus 和 Lumberjack,可以创建一个高效的日志中间件,用于记录请求和响应。以下是实现步骤: 1. 安装依赖 首先,确保安装了 Logrus 和 Lumberjack: go get github.com/sirupsen/logrus go get gopkg.in/natefin…

基于vite和vue3、 eslint、prettier、stylelint、husky规范

前言 在现代的前端开发中,代码规范非常重要。它可以提高团队的协作效率,减少代码错误,使代码更易于维护。为了实现代码规范化,我们可以使用一些工具来辅助我们的开发流程,包括eslint、prettier、stylelint、husky&am…

数据库表字段插入bug

瀚高数据库 目录 环境 BUG/漏洞编码 症状 触发条件 解决方案 环境 系统平台:Linux x86-64 Red Hat Enterprise Linux 7 版本:4.5.1 BUG/漏洞编码 3355 症状 数据库安全版v4.5.1,安装包为:hgdb4.5.1-see-centos7-x86-64-20210804.…

word中的内容旋转90度

在vsto、Aspose.Words 中,默认没有直接的 API 可以让表格整体旋转 90 度。然而,我们可以通过一些方式来实现类似的效果,具体思路如下: 将表格插入到一个形状(Shape)或文本框中,然后旋转该形状。…

DVD光盘解密工具 Xreveal v2.7.1 官方版

下载地址 【1】https://pan.quark.cn/s/a95d5fa38f48 【2】https://drive.uc.cn/s/1e81ba7ee01e4?public1 Xreveal是一款功能相当贴心给力的光碟工具,其功能可以帮助用户检测以及删除DVD、CD保护。它完全不含有任何的解密密钥以及BD转换表,它是基于官…

redis高级篇之IO多路复用select方法简介 第174节答疑

1、bitmap最大1024位,一个进程最多只能处理1024个客户端 2、&rset不可重用,每次socket有数据就相应的位会被置位 3、文件描述符数组拷贝到了内核态(只不过无系统调用切换上下文的开销。(内核层可优化为异步事件通知)),仍然有开销。select…

003 优秀学员统计

003 优秀学员统计 题目描述 公司某部门软件教导团正在组织新员工每日打卡学习活动,他们开展这项学习活动已经一个月了,所以想统计一下这个月优秀的打卡员工。每个员工对应一个id,每天的打卡记录当天打卡的员工的id集合,一共30天…

【Windows】电脑端口明明没有进程占用但显示端口被占用(动态端口)

TOC 一、问题 重启电脑后,启用某个服务显示1089端口被占用。 查看是哪个进程占用了: netstat -aon | findstr "1089"没有输出,但是换其他端口,是可以看到相关进程的: 现在最简单的方式是给我的服务指定另…

解決爬蟲代理連接的方法

爬蟲在運行過程中常常會遇到代理連接的問題,這可能導致數據抓取的效率降低甚至失敗。 常見的代理連接問題 代理IP失效:這是最常見的問題之一。有些代理IP可能在使用一段時間後失效,導致連接失敗。 連接超時:由於網路不穩定或代…

阿里云项目启动OOM问题解决

问题描述 随着项目业务的增长,系统启动时内存紧张,每次第一次启动的时候就会出现oom第二次或者第n的时候,就启动成功了。 带着这个疑问,我就在阿里云上提交了工单,咨询为什么第一次提交失败但是后面却能提交成功尼&a…

HarmonyOS 组件样式@Style 、 @Extend、自定义扩展(AttributeModifier、AttributeUpdater)

1. HarmonyOS Style 、 Extend、自定义扩展(AttributeModifier、AttributeUpdater) Styles装饰器:定义组件重用样式   ;Extend装饰器:定义扩展组件样式   自定义扩展:AttributeModifier、AttributeUpdater 1.1. 区…

SpringBoot 下的Excel文件损坏与内容乱码问题

序言 随着打包部署的方式的改变,原本正常运行的代码可能带来一些新的问题,比如我们现在使用SpringBoot 的方式生成Jar包直接运行,就会对我们再在Resource下的Excel文件产生影响,导入与预期不符的情况发生cuiyaonan2000163.com 比…