基于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.rhkb.cn/news/457651.html

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

相关文章

️ Vulnhuntr:利用大型语言模型(LLM)进行零样本漏洞发现的工具

在网络安全领域,漏洞的发现和修复是保护系统安全的关键。今天,我要向大家介绍一款创新的工具——Vulnhuntr,这是一款利用大型语言模型(LLM)进行零样本漏洞发现的工具,能够自动分析代码,检测远程…

编写一个简单的Iinput_dev框架

往期内容 本专栏往期内容: input子系统的框架和重要数据结构详解-CSDN博客input device和input handler的注册以及匹配过程解析-CSDN博客input device和input handler的注册以及匹配过程解析-CSDN博客 I2C子系统专栏: 专栏地址:IIC子系统_憧憬…

2024年CentOS镜像下载地址,包括CentOS官网、国内镜像下载,超详细也

这里给大家提供了4种镜像下载地址,包括CentOS官方镜像下载、阿里云开源镜像站下载、网易开源镜像下载搜狐开源镜像下载。 1.CentOS官网镜像下载 因为服务器在国外所以打开CentOS官方网站的时候可能会比较慢。大家可以选择后面几种国内镜像下载方式。 1.1进入CentO…

《决策思维:人人必备的决策口袋书》

本书干货很多,十分值得一读。但受众不是一线员工与一线管理者,更多的倾向于管理者的管理者。一线员工读完的最大收获是可以理解老板的决策逻辑与思维方式,便于更好的去做执行。同时,还能帮助判断老板的决策是否正确,是…

esp32学习:语音识别教程esp-skainet库的使用

乐鑫推出了基于esp_sr算法的语音识别应用esp-skainet。官方介绍:ESP-Skainet 以最便捷的方式支持基于乐鑫的 ESP32系列 芯片的唤醒词识别和命令词识别应用程序的开发。使用 ESP-Skainet,您可以轻松构建唤醒词识别和命令词识别应用程序。 支持的主要功能…

C#通过异或(^)运算符制作二进制加密(C#实现加密)

快速了解异或运算符&#xff1a; 异或运算符在C#中用 “^” 来表示 口诀&#xff1a;相同取0&#xff0c;相异取1 简单加密解密winform示例&#xff1a; /// <summary>/// 异或运算符加密实现/// </summary>/// <param name"p_int_Num">初始值<…

网络原理之 TCP解释超详细!!!

TCP 有连接的 可靠传输 面向字节流 全双工 其中最核心的是可靠传输 那么 TCP 如何使用可靠传输的 ??? 我们尽可能传过去, 如果传不过去,发送方至少知道自己没传过去, 所以在于接收方, 收到或者没有收到, 都会有应答的操作 1. 确认应答 实现可靠性最核心的机制!!! 引出 …

【2024最新】渗透测试工具大全(超详细),收藏这一篇就够了!

所有工具仅能在取得足够合法授权的企业安全建设中使用&#xff0c;在使用所有工具过程中&#xff0c;您应确保自己所有行为符合当地的法律法规。如您在使用所有工具的过程中存在任何非法行为&#xff0c;您将自行承担所有后果&#xff0c;所有工具所有开发者和所有贡献者不承担…

eks节点的网络策略配置机制解析

参考链接 vpc-cni网络策略最佳实践&#xff0c;https://aws.github.io/aws-eks-best-practices/security/docs/network/#additional-resourcesvpc cni网络策略faq&#xff0c;https://github.com/aws/amazon-vpc-cni-k8s/blob/0703d03dec8afb8f83a7ff0c9d5eb5cc3363026e/docs/…

IP数据报的 分片与组装技术 深度解析

&#x1f351;个人主页&#xff1a;Jupiter. &#x1f680; 所属专栏&#xff1a;计算机网络高效通关之路 欢迎大家点赞收藏评论&#x1f60a; 目录 IP 分片和组装分片与组装的过程分片组装 分片与组装过程的示意图分片组装过程 IP 分片和组装 16 位标识(id): 唯一的标识主机发…

Redis 事务 总结

前言 相关系列 《Redis & 目录》&#xff08;持续更新&#xff09;《Redis & 事务 & 源码》&#xff08;学习过程/多有漏误/仅作参考/不再更新&#xff09;《Redis & 事务 & 总结》&#xff08;学习总结/最新最准/持续更新&#xff09;《Redis & 事务…

自旋锁原理及基于原子引用手写自旋锁

什么是自旋锁 自旋锁&#xff08;Spinlock&#xff09;是一种用于多线程同步的机制&#xff0c;在尝试获取锁时&#xff0c;如果锁已经被其他线程持有&#xff0c;则当前线程不会立即被阻塞&#xff0c;而是会进入一个循环中反复尝试获取锁&#xff0c;直到成功为止。这种机制通…

探索CRM功能:六个解决方案助力企业发展

在当前竞争激烈的市场环境中&#xff0c;企业面临着客户关系管理的诸多挑战&#xff0c;CRM&#xff08;客户关系管理&#xff09;系统能够有效解决客户数据孤岛、提升客户互动效率、增强销售预测准确性等问题。通过整合客户信息和优化业务流程&#xff0c;CRM帮助企业实现更高…

解决JeecgBoot微服务通过Gateway访问Swagger资源出现“Knife4j文档请求异常”

1.问题描述 基于jeecgboot单体版本,参照官方推荐的纯微服务项目拆分指南,对jeecgboot项目进行微服务拆分,将gateway和system模块启动成功后,通过gateway访问访问Swagger接口文档,出现“Knife4j文档请求异常”,如下图: 2.问题定位: 1.浏览器F12打开控制台,查看异常请…

Kafka-Eagle(可视化监控平台)安装教程

Kafka Eagle 1. Install Mysql Kafka-Eagle 的安装依赖于 MySQL&#xff0c;MySQL 主要用来存储可视化展示的数据。 2.Kafka 环境准备 调整Kafka内存占用等参数&#xff0c;暴露JMX JMX(Java Management Extensions)是一个为应用程序植入管理功能的框架。JMX是一套标准的代理和…

在GeoTools中的Shapefile属性表读取效率之Shp与Dbf对比

目录 前言 一、POI测试数据简介 1、选用的POI数据 2、关于数据的属性数据 二、属性数据读取的两种方式实现 1、基于DbaseFileReader的读取 2、基于SimpleFeatureSource的读取 三、实际运行对比 1、内存和CPU占用情况 2、运行耗时情况 四、总结 前言 众所周知&#x…

《向量数据库指南》——text-embedding-3-large与Mlivus Cloud打造语义搜索新纪元

使用text-embedding-3-large生成向量并将向量插入Mlivus Cloud实现高效语义搜索的深度解析与实战操作 在数字化时代,数据的处理和存储方式正在经历前所未有的变革。特别是随着大数据和人工智能技术的快速发展,向量数据库作为一种新型的数据存储和查询方式,正逐渐受到越来越…

系统架构设计师教程 第2章 2.6 计算机语言 笔记

2.6计算机语言 ★★★★☆ 2.6.1计算机语言的组成 计算机语言 (Computer Language) 是指用于人与计算机之间交流的一种语言&#xff0c;是人与计算机之间传递信息的媒介。 计算机语言主要由一套指令组成&#xff0c;指令一般包括表达式、流程控制和集合三大部分内容。 表达…

Selenium爬虫技术:如何模拟鼠标悬停抓取动态内容

介绍 在当今数据驱动的世界中&#xff0c;抓取动态网页内容变得越来越重要&#xff0c;尤其是像抖音这样的社交平台&#xff0c;动态加载的评论等内容需要通过特定的方式来获取。传统的静态爬虫方法难以处理这些由JavaScript生成的动态内容&#xff0c;Selenium爬虫技术则是一…

测试造数,excel转insert语句

目录 excel转sql的insert语句一、背景二、直接上代码 excel转sql的insert语句 一、背景 在实际测试工作中&#xff0c;需要频繁地进行测试造数并插入数据库验证&#xff0c;常规的手写sql语句过于浪费时间&#xff0c;为此简单写个脚本&#xff0c;通过excel来造数&#xff0…