使用 GoZero 框架实现一个简单的course课程class系统

使用 GoZero 框架实现一个简单的课程增删改查(CRUD)功能需要进行以下步骤:设置 GoZero 项目、定义数据模型、创建相应的 API 接口以及实现 CRUD 操作。下面是一个示例代码,包括基本的课程管理功能。

### 1. 安装 GoZero

首先,确保你的 Go 环境已安装 GoZero。你可以通过以下命令安装:

go get -u github.com/tal-tech/go-zero

### 2. 创建项目

使用 GoZero 创建一个新的项目:

go-zero new course

进入项目目录:

cd course

### 3. 定义数据模型

创建一个名为 `course.go` 的模型文件,定义课程的结构体和数据库操作方法:

// model/course.go
package modelimport ("github.com/tal-tech/go-zero/core/stores/sqlx"
)type Course struct {Id    int64  `db:"id"` // 课程IDName  string `db:"name"` // 课程名称Code  string `db:"code"` // 课程代码
}type CourseModel struct {conn sqlx.SqlConn
}func NewCourseModel(conn sqlx.SqlConn) CourseModel {return CourseModel{conn: conn}
}func (m CourseModel) Insert(course Course) (int64, error) {result, err := m.conn.Exec("INSERT INTO course (name, code) VALUES (?, ?)", course.Name, course.Code)if err != nil {return 0, err}return result.LastInsertId()
}func (m CourseModel) Update(course Course) error {_, err := m.conn.Exec("UPDATE course SET name = ?, code = ? WHERE id = ?", course.Name, course.Code, course.Id)return err
}func (m CourseModel) Delete(id int64) error {_, err := m.conn.Exec("DELETE FROM course WHERE id = ?", id)return err
}func (m CourseModel) FindOne(id int64) (Course, error) {var course Courseerr := m.conn.QueryRow(&course, "SELECT id, name, code FROM course WHERE id = ?", id)return course, err
}func (m CourseModel) FindAll() ([]Course, error) {var courses []Courseerr := m.conn.QueryRows(&courses, "SELECT id, name, code FROM course")return courses, err
}

### 4. 创建数据库表

确保你的数据库中有一个 `course` 表。以下是 SQL 语句示例:

CREATE TABLE course (id INT AUTO_INCREMENT PRIMARY KEY,name VARCHAR(255) NOT NULL,code VARCHAR(50) NOT NULL
);

### 5. 创建 API 处理程序

创建一个处理程序文件,例如 `courseHandler.go`,并实现 CRUD 接口:

// handler/courseHandler.go
package handlerimport ("net/http""github.com/tal-tech/go-zero/rest/httpx""your_project/model" // 根据你的项目路径更新"github.com/tal-tech/go-zero/core/logx"
)type CourseRequest struct {Id   int64  `json:"id,omitempty"`Name string `json:"name"`Code string `json:"code"`
}func CreateCourseHandler(model model.CourseModel) http.HandlerFunc {return func(w http.ResponseWriter, r *http.Request) {var req CourseRequestif err := httpx.Parse(r, &req); err != nil {httpx.Error(w, err)return}course := model.Course{Name: req.Name, Code: req.Code}id, err := model.Insert(course)if err != nil {logx.Error(err)httpx.Error(w, err)return}httpx.OkJson(w, map[string]int64{"id": id})}
}func UpdateCourseHandler(model model.CourseModel) http.HandlerFunc {return func(w http.ResponseWriter, r *http.Request) {var req CourseRequestif err := httpx.Parse(r, &req); err != nil {httpx.Error(w, err)return}course := model.Course{Id: req.Id, Name: req.Name, Code: req.Code}if err := model.Update(course); err != nil {logx.Error(err)httpx.Error(w, err)return}httpx.Ok(w)}
}func DeleteCourseHandler(model model.CourseModel) http.HandlerFunc {return func(w http.ResponseWriter, r *http.Request) {id := r.URL.Query().Get("id")if err := model.Delete(id); err != nil {logx.Error(err)httpx.Error(w, err)return}httpx.Ok(w)}
}func FindCourseHandler(model model.CourseModel) http.HandlerFunc {return func(w http.ResponseWriter, r *http.Request) {id := r.URL.Query().Get("id")course, err := model.FindOne(id)if err != nil {logx.Error(err)httpx.Error(w, err)return}httpx.OkJson(w, course)}
}func FindAllCoursesHandler(model model.CourseModel) http.HandlerFunc {return func(w http.ResponseWriter, r *http.Request) {courses, err := model.FindAll()if err != nil {logx.Error(err)httpx.Error(w, err)return}httpx.OkJson(w, courses)}
}

### 6. 配置路由

在你的 `main.go` 文件中设置路由并启动 HTTP 服务器:

// main.go
package mainimport ("net/http""github.com/tal-tech/go-zero/rest""your_project/model" // 根据你的项目路径更新"your_project/handler" // 根据你的项目路径更新"github.com/tal-tech/go-zero/core/stores/sqlx"
)func main() {conn := sqlx.NewMysql("user:password@tcp(localhost:3306)/dbname") // 更新数据库连接信息courseModel := model.NewCourseModel(conn)r := rest.NewServer()defer r.Stop()r.AddRoute(rest.Route{Method:  http.MethodPost,Path:    "/courses",Handler: handler.CreateCourseHandler(courseModel),})r.AddRoute(rest.Route{Method:  http.MethodPut,Path:    "/courses",Handler: handler.UpdateCourseHandler(courseModel),})r.AddRoute(rest.Route{Method:  http.MethodDelete,Path:    "/courses",Handler: handler.DeleteCourseHandler(courseModel),})r.AddRoute(rest.Route{Method:  http.MethodGet,Path:    "/courses",Handler: handler.FindAllCoursesHandler(courseModel),})r.AddRoute(rest.Route{Method:  http.MethodGet,Path:    "/courses/{id}",Handler: handler.FindCourseHandler(courseModel),})r.Start()
}

### 7. 启动服务

使用以下命令运行你的 Go 应用:

go run main.go

### 8. 测试 API

使用工具如 `Postman` 或 `curl` 测试 API:

- **创建课程**:
 

  curl -X POST http://localhost:8080/courses -d '{"name": "Go 101", "code": "G101"}'

- **更新课程**:
 

  curl -X PUT http://localhost:8080/courses -d '{"id": 1, "name": "Go 102", "code": "G102"}'

- **删除课程**:
 

  curl -X DELETE http://localhost:8080/courses?id=1

- **查找课程**:
  ```bash

  curl -X GET http://localhost:8080/courses/1


  ```

- **查找所有课程**:
  ```bash

  curl -X GET http://localhost:8080/courses


  ```

### 总结

以上示例展示了如何使用 GoZero 框架实现课程管理的基本 CRUD 操作。根据需要,您可以扩展和优化该示例,包括添加身份验证、错误处理、日志记录等功能。

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

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

相关文章

基于SSM党务政务服务热线管理系统的设计

管理员账户功能包括:系统首页,个人中心,用户管理,部门管理,办事信息管理,信息记录管理,系统管理 前台账号功能包括:系统首页,个人中心,部门,信息…

十月编程语言排行榜~

前言:TIOBE编程语言排行榜通过分析全球开发者的活动、代码搜索和问答社区的流量,提供了编程语言受欢迎度的动态图景。该指数是技术趋势的风向标,揭示了哪些编程语言在技术领域占据主导地位,哪些语言正在快速崛起或逐渐衰退。 ✨✨…

骨传导耳机哪款比较值得入手?五款热门机型实测内容分享!

在贴吧、论坛、知乎等社区网站上,大家可能经常看到用户吐槽、讨论骨传导耳机哪种好等话题。很多人反映,由于使用了不适合的骨传导耳机,出现了听力不适、佩戴不稳等诸多问题。作为一名有着丰富经验的数码测评师,我对此问题非常关注…

考研数据结构——C语言实现二叉树前,中,后序非递归遍历

定义二叉树节点(BTree): ElemType value:存储节点的值。struct BTree* LeftChild:指向左子节点的指针。struct BTree* RightChild:指向右子节点的指针。 节点访问函数(visit)&#x…

Linux SSH无密码使用私钥远程登录连接详细配置流程

文章目录 前言1. Linux 生成SSH秘钥对2. 修改SSH服务配置文件3. 客户端秘钥文件设置4. 本地SSH私钥连接测试5. Linux安装Cpolar工具6. 配置SSHTCP公网地址7. 远程SSH私钥连接测试8. 固定SSH公网地址9. 固定SSH地址测试 前言 本文将详细介绍如何将Linux SSH服务与cpolar相结合&…

【算法】深入理解布隆过滤器

1. 什么是布隆过滤器? 布隆过滤器(Bloom Filter)是一种空间效率极高的概率型数据结构,用于检测某个元素是否在一个集合中。与常见的数据结构如哈希表不同,布隆过滤器无法删除元素,并且会存在一定的误判率&…

实操部署amis-admin

当需要做一个web服务的时候,前端的实现很令我头疼。搜了一圈前端低代码框架后,注意到百度贡献的amis,通过json来写前端,很酷啊。不得不说,一个好的demo项目,真的能让人迅速进入状态,比直接看文档…

c++常用库函数

一.sort排序 快排的改进算法&#xff0c;评价复杂度为(nlogn). 1.用法 sort(起始地址&#xff0c;结束地址下一位&#xff0c;*比较函数) [起始地址&#xff0c;结束地址) (左开右闭) #include<bits/stdc.h> using namespace std; int main() {//sortvector<int&g…

基础sql

在执行删除操作之前&#xff0c;建议先运行一个 SELECT 查询来确认你要删除的记录。这可以帮助你避免误删数据。 删除字段id默认值为空字符串的所有数据 delete from users where id ; 删除字段id默认值为null的所有数据 delete from users where id is null; 删除字段upd…

msvcp140.dll重新安装的解决方法,msvcp140.dll丢失快速修复教程

msvcp140.dll丢失的问题是许多电脑用户经常遇到的问题。msvcp140.dll是Microsoft Visual C Redistributable Package的一部分&#xff0c;这个软件包包含了许多Windows系统运行所需的重要文件。当msvcp140.dll丢失时&#xff0c;可能会导致许多应用程序无法正常运行&#xff0c…

基于华为云智慧生活生态链设计的智能鱼缸

一. 引言 1.1 项目背景 随着智能家居技术的发展和人们对高品质生活的追求日益增长&#xff0c;智能鱼缸作为一种结合了科技与自然美的家居装饰品&#xff0c;正逐渐成为智能家居领域的新宠。本项目旨在设计一款基于华为云智慧生活生态链的智能鱼缸&#xff0c;它不仅能够提供…

初阶数据结构【2】--顺序表(详细且通俗易懂,不看一下吗?)

本章概述 线性表顺序表顺序表问题与思考彩蛋时刻&#xff01;&#xff01;&#xff01; 线性表 概念&#xff1a;一些在逻辑上成线性关系的数据结构的集合。线性表在逻辑上一定成线性结构&#xff0c;在物理层面上不一定成线性结构。常见的线性表&#xff1a;顺序表&#xff0…

学习文档(6)

Redis数据类型 Redis 常用的数据类型有哪些&#xff1f; Redis 中比较常见的数据类型有下面这些&#xff1a; 5 种基础数据类型&#xff1a;String&#xff08;字符串&#xff09;、List&#xff08;列表&#xff09;、Set&#xff08;集合&#xff09;、Hash&#xff08;散…

影楼即将倒闭!!!!stable diffusion comfyui制作:AI人像摄影专业工作流

最近我们在学习ComfyUI&#xff0c;并用它搭建的摄影写真工作流&#xff0c;只需几张照片即可生成可交付的艺术写真照。 AI写真有以下好处&#xff1a; 创意无限&#xff1a;AI写真可以创造出超越现实的场景和效果&#xff0c;为用户提供更多的创意空间。用户可以通过简单的输…

MySQL 读写分离

优质博文&#xff1a;IT-BLOG-CN 一、背景 随着机票业务不断增长&#xff0c;订单库的读性能遇到了挑战&#xff0c;因此对订单库进行读写分离操作。主要目的是提高数据库的并发性能和可扩展性。当系统的所有写操作效率尚可&#xff0c;读数据请求效率较低时&#xff0c;比如…

快速解决Windows端口被占用

检查占用的端口号,显示9210端口被占用 使用运行打开cmd&#xff0c;直接输入如下命令 netstat -ano | find "9210"可以看到 9210端口执行的进程是PID为26836 知道PID后打开电脑的任务管理器-详细信息,找到PID是26836的进程,可以看到是QQ,关掉就解决了

微软开源项目 Detours 详细介绍与使用实例分享

目录 1、Detours概述 2、Detours功能特性 3、Detours工作原理 4、Detours应用场景 5、Detours兼容性 6、Detours具体使用方法 7、Detours使用实例 - 使用Detours拦截系统库中的UnhandledExceptionFilter接口,实现对程序异常的拦截 C++软件异常排查从入门到精通系列教程…

路由通信 的 VLAN技术

一、VLAN基础 虚拟局域网&#xff08;Virtual Local Area Network&#xff0c;VLAN&#xff09; 根据管理功能、组织机构或应用类型对交换局域网进行分段而形成的逻辑网络。 交换机最多支持4094个VLAN&#xff0c;其中默认管理VLAN是VLAN1&#xff0c;不能创建&#xff0c;也…

Python爬虫使用示例-古诗词摘录

一、分析需求 目标地址&#xff1a; https://www.sou-yun.cn/Query.aspx?typepoem&id二、提取诗句 import os import re import requests import parsel#url https://www.sou-yun.cn/PoemIndex.aspx?dynastyTang&author14976&typeJie urlhttps://www.sou-yun.…

关于md5强比较和弱比较绕过的实验

在ctf比赛题中我们的md5强弱比较的绕过题型很多&#xff0c;大部分都是结合了PHP来进行一个考核。这一篇文章我将讲解一下最基础的绕过知识。 MD5弱比较 比较的步骤 在进行弱比较时&#xff0c;PHP会按照以下步骤执行&#xff1a; 确定数据类型&#xff1a;检查参与比较的两…