这是一个基于 Go 的简单课题/项目管理后端,提供登录注册、教师发布课题、学生选题、项目状态管理等基础接口,可用于课程设计或毕业设计选题系统的后端示例。
- 用户登录、注册(区分学生 / 教师)
- 教师创建、更新、删除项目
- 按教师姓名、标题、条件(状态/类型/专业/教师)查询项目
- 查询所有项目、查询已提交/已审核项目
- 学生选题、查看当前用户关联的项目
- 查询个人信息、查询所有学生及其选题状态
- POST
/login:用户登录,返回 JWT Token - POST
/register:用户注册 - GET
/project-by-name:按教师姓名查询项目 - GET
/allproject:获取所有项目,支持page、page_size分页 - GET
/projects/filter:按status、type、major、teacher_name等条件筛选项目,同样支持page、page_size分页,并返回总数 - POST
/project-create:教师创建项目(需登录) - DELETE
/delete-project:教师按标题删除项目(需登录) - PUT
/update-project:教师更新项目(需登录) - GET
/updatestatus:查询已提交项目(需登录) - PUT
/updatestatus:将项目更新为已审核(需登录) - GET
/personinfo:获取当前登录用户的个人信息(需登录) - GET
/allstudentinfo:获取所有学生及其选题状态(需登录) - GET
/my-projects:获取当前用户关联的项目(教师:自己创建的项目;学生:自己选择的项目,需登录) - POST
/project-select:学生选择项目,将自己与项目建立关联(需登录)
受 JWT 保护的接口需要在
AuthorizationHeader 中携带登录返回的 Token。
- Go 1.20+
- MySQL 5.7/8.0
- 安装依赖
go mod tidy- 配置数据库
编辑 internal/config/Config.yaml,根据实际环境修改数据库连接信息(host、port、user、password、name)。
也可以通过环境变量覆盖配置,便于在开发、测试、生产环境中使用不同的数据库:
DB_HOSTDB_PORTDB_USERDB_PASSWORDDB_NAME
- 运行服务
go run main.go服务默认监听在 :8080 端口。
curl -X POST "http://localhost:8080/login" \
-H "Content-Type: application/json" \
-d '{"userID": 10001, "password": "your_password"}'返回示例(简化):
{
"user_id": 10001,
"username": "alice",
"user_type": "student",
"token": "<JWT_TOKEN>"
}后续受保护接口在 Header 中携带:
Authorization: <JWT_TOKEN>
curl "http://localhost:8080/allproject?page=1&page_size=10"返回示例(结构):
{
"data": [
{ "project_id": 1, "title": "..." }
],
"pagination": {
"page": 1,
"page_size": 10,
"total": 20,
"total_pages": 2
}
}curl "http://localhost:8080/projects/filter?status=开放&type=论文&major=软件工程&page=1&page_size=10"curl -X POST "http://localhost:8080/project-select" \
-H "Authorization: <JWT_TOKEN>" \
-H "Content-Type: application/json" \
-d '{"project_id": 1}'- 语言:Go
- Web 框架:Gin (
github.com/gin-gonic/gin) - ORM:GORM (
gorm.io/gorm,gorm.io/driver/mysql) - 数据库:MySQL
- 配置管理:YAML(
gopkg.in/yaml.v2) - 身份认证:JWT(
github.com/dgrijalva/jwt-go) - 密码加密:bcrypt(
golang.org/x/crypto/bcrypt) - 若需要部署在服务器上,配置nignx反向代理即可
- User:用户账号(
user表),包含user_id、username、password、role、user_type等 - Student:学生信息(
student表),通过user_id关联 User - Teacher:教师信息(
teacher表),通过user_id关联 User - Project:课题/项目(
project表),包含教师、状态、类型、专业等信息 - project_student:项目与学生的多对多关联表(学生选题关系)
main.go:程序入口,初始化数据库与路由router/:路由注册controller/:业务控制器,实现具体接口逻辑internal/model/:数据模型定义internal/config/:数据库配置与初始化pkg/utils/:JWT、中间件等通用工具