Go语言加Vue3零基础入门全栈班11 Go语言+gorm用户管理系统实战 2024年08月03日 课程笔记

news/2024/10/22 12:19:17/

概述

如果您没有Golang的基础,应该学习如下前置课程。

  • Golang零基础入门
  • Golang面向对象编程
  • Go Web 基础
  • Go语言开发REST API接口_20240728
  • Go语言操作MySQL开发用户管理系统API教程_20240729
  • Redis零基础快速入门_20231227
  • Go+Redis开发用户管理系统API实战_20240730
  • MongoDB快速入门_20240411
  • Go语言+MongoDB用户管理系统实战_20240730
  • Go语言+gRPC用户微服务项目实战_20240730

基础不好的同学每节课的代码最好配合视频进行阅读和学习,如果基础比较扎实,则阅读本教程巩固一下相关知识点即可,遇到不会的知识点再看视频。

课程特色

本教程录制于2024年8月3日,使用Go1.22版本,基于Goland2024进行开发,采用的技术栈比较新。

每节课控制在十分钟以内,课时精简,每节课都是一个独立的知识点,如果有遗忘,完全可以当做字典来查询,绝不浪费大家的时间。

整个课程从如何连接MySQL讲起,讲解gorm的增删改查常见操作,然后结合REST API接口开发的知识,开发一个用户管理系统的后端API服务,层层递进,学习路径平缓。

Golang是当前国内越来越多的企业正在全面转的一门系统级别的高性能的编程语言,比C语言写法更加的简单,比Python性能更加的好,是新时代的C语言,建议每个程序员都掌握!

视频课程

最近发现越来越多的公司在用Golang了,所以精心整理了一套视频教程给大家,这个是其中的第11部,后续还会有很多。

视频已经录制完成,完整目录截图如下:
在这里插入图片描述

本套课程的特色是每节课都是一个核心知识点,每个视频控制在十分钟左右,精简不废话,拒绝浪费大家的时间。

课程目录

  • 01 概述
  • 02 连接MySQL数据库
  • 03 创建表
  • 04 新增数据
  • 05 查询数据
  • 06 修改数据
  • 07 删除数据
  • 08 zdpgo_gorm的介绍和使用
  • 09 事务的使用
  • 10 搭建项目的基本结构
  • 11 封装和使用初始化和关闭MySQL的方法
  • 12 创建和启动服务
  • 13 实现新增用户的接口并进行测试
  • 14 实现查询所有用户的接口并进行测试
  • 15 实现根据ID查询用户的接口并进行测试
  • 16 实现根据ID修改用户的接口并进行测试
  • 17 实现根据ID删除用户的接口并进行测试
  • 18 总结

完整代码

02 连接MySQL数据库

package mainimport ("github.com/jinzhu/gorm"_ "github.com/jinzhu/gorm/dialects/mysql"
)func main() {db, err := gorm.Open("mysql","root:root@tcp(127.0.0.1:3306)/test?charset=utf8&parseTime=True&loc=Local",)if err != nil {panic(err)}defer db.Close()db.DB().SetMaxIdleConns(10)db.DB().SetMaxOpenConns(100)
}

03 创建表

package mainimport ("github.com/jinzhu/gorm"_ "github.com/jinzhu/gorm/dialects/mysql"
)type User struct {Id   int    `json:"id"`Name string `json:"name"`Age  int    `json:"age"`
}func main() {db, err := gorm.Open("mysql","root:root@tcp(127.0.0.1:3306)/test?charset=utf8&parseTime=True&loc=Local",)if err != nil {panic(err)}defer db.Close()db.DB().SetMaxIdleConns(10)db.DB().SetMaxOpenConns(100)db.AutoMigrate(&User{})
}

04 新增数据

package mainimport ("github.com/jinzhu/gorm"_ "github.com/jinzhu/gorm/dialects/mysql"
)type User struct {Id   int    `json:"id"`Name string `json:"name"`Age  int    `json:"age"`
}func main() {db, err := gorm.Open("mysql","root:root@tcp(127.0.0.1:3306)/test?charset=utf8&parseTime=True&loc=Local",)if err != nil {panic(err)}defer db.Close()db.DB().SetMaxIdleConns(10)db.DB().SetMaxOpenConns(100)db.AutoMigrate(&User{})user := User{11, "张三", 33}db.Create(&user)
}

05 查询数据

package mainimport ("fmt""github.com/jinzhu/gorm"_ "github.com/jinzhu/gorm/dialects/mysql"
)type User struct {Id   int    `json:"id"`Name string `json:"name"`Age  int    `json:"age"`
}func main() {db, err := gorm.Open("mysql","root:root@tcp(127.0.0.1:3306)/test?charset=utf8&parseTime=True&loc=Local",)if err != nil {panic(err)}defer db.Close()db.DB().SetMaxIdleConns(10)db.DB().SetMaxOpenConns(100)db.AutoMigrate(&User{})var users []Userdb.Find(&users)fmt.Println(users)
}

06 修改数据

package mainimport ("fmt""github.com/jinzhu/gorm"_ "github.com/jinzhu/gorm/dialects/mysql"
)type User struct {Id   int    `json:"id"`Name string `json:"name"`Age  int    `json:"age"`
}func main() {db, err := gorm.Open("mysql","root:root@tcp(127.0.0.1:3306)/test?charset=utf8&parseTime=True&loc=Local",)if err != nil {panic(err)}defer db.Close()db.DB().SetMaxIdleConns(10)db.DB().SetMaxOpenConns(100)db.AutoMigrate(&User{})db.Model(&User{Id: 11}).Update("name", "李四333")var users []Userdb.Find(&users)fmt.Println(users)
}

07 删除数据

package mainimport ("fmt""github.com/jinzhu/gorm"_ "github.com/jinzhu/gorm/dialects/mysql"
)type User struct {Id   int    `json:"id"`Name string `json:"name"`Age  int    `json:"age"`
}func main() {db, err := gorm.Open("mysql","root:root@tcp(127.0.0.1:3306)/test?charset=utf8&parseTime=True&loc=Local",)if err != nil {panic(err)}defer db.Close()db.DB().SetMaxIdleConns(10)db.DB().SetMaxOpenConns(100)db.AutoMigrate(&User{})db.Delete(&User{Id: 11})var users []Userdb.Find(&users)fmt.Println(users)
}

08 zdpgo_gorm的介绍和使用

package mainimport ("fmt""github.com/zhangdapeng520/zdpgo_gorm"_ "github.com/zhangdapeng520/zdpgo_mysql"
)type User struct {Id   int    `json:"id"`Name string `json:"name"`Age  int    `json:"age"`
}func main() {db, err := zdpgo_gorm.Open("mysql","root:root@tcp(127.0.0.1:3306)/test?charset=utf8&parseTime=True&loc=Local",)if err != nil {panic(err)}defer db.Close()db.DB().SetMaxIdleConns(10)db.DB().SetMaxOpenConns(100)db.AutoMigrate(&User{})var users []Userdb.Find(&users)fmt.Println(users)
}

09 事务的使用

package mainimport ("fmt""github.com/zhangdapeng520/zdpgo_gorm"_ "github.com/zhangdapeng520/zdpgo_mysql"
)type User struct {Id   int    `json:"id"`Name string `json:"name"`Age  int    `json:"age"`
}func main() {db, err := zdpgo_gorm.Open("mysql","root:root@tcp(127.0.0.1:3306)/test?charset=utf8&parseTime=True&loc=Local",)if err != nil {panic(err)}defer db.Close()db.DB().SetMaxIdleConns(10)db.DB().SetMaxOpenConns(100)db.AutoMigrate(&User{})tx := db.Begin()u := User{Name: "赵六", Age: 18}err = tx.Create(&u).Errorif err != nil {tx.Rollback()panic(err)}tx.Commit()var users []Userdb.Find(&users)fmt.Println(users)
}

11 封装和使用初始化和关闭MySQL的方法

package gimport ("github.com/zhangdapeng520/zdpgo_gorm"_ "github.com/zhangdapeng520/zdpgo_mysql""gorm_api_user2/model"
)var GDB *zdpgo_gorm.DBfunc initMySQL() {var err errorGDB, err = zdpgo_gorm.Open("mysql","root:root@tcp(127.0.0.1:3306)/test?charset=utf8mb4&parseTime=True&loc=Local",)if err != nil {panic(err)}GDB.DB().SetMaxIdleConns(10)GDB.DB().SetMaxOpenConns(100)GDB.AutoMigrate(&model.User{})
}func closeMySQL() {GDB.Close()
}

12 创建和启动服务

package routerimport "github.com/zhangdapeng520/zdpgo_httprouter"func InitRouter() *zdpgo_httprouter.Router {router := zdpgo_httprouter.New()router.POST("/user", userAdd)router.GET("/user", userGetAll)router.GET("/user/:id", userGet)router.PUT("/user/:id", userUpdate)router.DELETE("/user/:id", userDelete)return router
}
package mainimport ("gorm_api_user2/g""gorm_api_user2/router""net/http""time"
)func main() {g.InitGlobal()defer g.CloseGlobal()server := &http.Server{Addr:         ":8888",Handler:      router.InitRouter(),ReadTimeout:  5 * time.Second,WriteTimeout: 5 * time.Second,}server.ListenAndServe()
}

13 实现新增用户的接口并进行测试

package routerimport ("github.com/zhangdapeng520/zdpgo_httprouter""gorm_api_user2/g""gorm_api_user2/model""net/http"
)func userAdd(w http.ResponseWriter, r *http.Request, _ zdpgo_httprouter.Params) {var user model.Userzdpgo_httprouter.GetJson(r, &user)g.GDB.Create(&user)zdpgo_httprouter.ResponseSuccess(w, user)
}
package routerimport ("github.com/zhangdapeng520/zdpgo_httprouter""io""os""testing"
)func TestUserAdd(t *testing.T) {targetUrl := "http://127.0.0.1:8888/user"data := map[string]interface{}{"name": "王五","age":  30,}resp, err := zdpgo_httprouter.SendJson("POST", targetUrl, data)if err != nil {t.Error(err)}io.Copy(os.Stdout, resp.Body)
}

14 实现查询所有用户的接口并进行测试

package routerimport ("github.com/zhangdapeng520/zdpgo_httprouter""gorm_api_user2/g""gorm_api_user2/model""net/http""strconv"
)func userGetAll(w http.ResponseWriter, r *http.Request, _ zdpgo_httprouter.Params) {var users []model.Userg.GDB.Find(&users)zdpgo_httprouter.ResponseSuccess(w, users)
}func userGet(w http.ResponseWriter, r *http.Request, ps zdpgo_httprouter.Params) {idStr := ps.ByName("id")id, _ := strconv.Atoi(idStr)var user model.Userg.GDB.Find(&user, "id=?", id)zdpgo_httprouter.ResponseSuccess(w, user)
}
package routerimport ("io""net/http""os""testing"
)func TestUserGetAll(t *testing.T) {targetUrl := "http://127.0.0.1:8888/user"resp, err := http.Get(targetUrl)if err != nil {t.Error(err)}io.Copy(os.Stdout, resp.Body)
}func TestUserGet(t *testing.T) {targetUrl := "http://127.0.0.1:8888/user/4"resp, err := http.Get(targetUrl)if err != nil {t.Error(err)}io.Copy(os.Stdout, resp.Body)
}

16 实现根据ID修改用户的接口并进行测试

package routerimport ("github.com/zhangdapeng520/zdpgo_httprouter""gorm_api_user2/g""gorm_api_user2/model""net/http""strconv"
)func userUpdate(w http.ResponseWriter, r *http.Request, ps zdpgo_httprouter.Params) {idStr := ps.ByName("id")id, _ := strconv.Atoi(idStr)var user model.Userzdpgo_httprouter.GetJson(r, &user)g.GDB.Model(model.User{Id: id}).Update("name", user.Name, "age", user.Age)zdpgo_httprouter.ResponseSuccess(w, nil)
}
package routerimport ("github.com/zhangdapeng520/zdpgo_httprouter""io""os""testing"
)func TestUserUpdate(t *testing.T) {targetUrl := "http://127.0.0.1:8888/user/4"data := map[string]interface{}{"name": "李四333","age":  30,}resp, err := zdpgo_httprouter.SendJson("PUT", targetUrl, data)if err != nil {t.Error(err)}io.Copy(os.Stdout, resp.Body)
}

17 实现根据ID删除用户的接口并进行测试

package routerimport ("github.com/zhangdapeng520/zdpgo_httprouter""gorm_api_user2/g""gorm_api_user2/model""net/http""strconv"
)func userDelete(w http.ResponseWriter, r *http.Request, ps zdpgo_httprouter.Params) {idStr := ps.ByName("id")id, _ := strconv.Atoi(idStr)g.GDB.Delete(&model.User{Id: id})zdpgo_httprouter.ResponseSuccess(w, nil)
}
package routerimport ("github.com/zhangdapeng520/zdpgo_httprouter""io""os""testing"
)func TestUserDelete(t *testing.T) {targetUrl := "http://127.0.0.1:8888/user/4"data := map[string]interface{}{}resp, err := zdpgo_httprouter.SendJson("DELETE", targetUrl, data)if err != nil {t.Error(err)}io.Copy(os.Stdout, resp.Body)
}

总结

整个课程从如何连接MySQL讲起,讲解gorm的增删改查常见操作,然后结合REST API接口开发的知识,开发一个用户管理系统的后端API服务,层层递进,学习路径平缓。

通过本套课程,能帮你入门Go语言加gorm框架开发后端REST API接口服务的技术。

如果您需要完整的源码,打赏20元即可。

人生苦短,我用PyGo,我是您身边的Python私教~


http://www.ppmy.cn/news/1505059.html

相关文章

JS如何实现禁止截屏、打印、另存为操作?

禁止缓存可以前台HTML使用 <meta http-equiv="pragma" content="no-cache" /> 屏蔽选中、粘贴、复制、剪切、右键菜单、禁止新窗口打开 HTML <body οncοntextmenu="return false" onselectstart="return false" οncοn…

搭建 Rancher 服务,配置k8s集群

1. 前提条件 前提条件&#xff1a; 安装docker&#xff0c;要求版本各节点版本一致。网上还有额外的要求&#xff1a;关闭swap、禁用selinux等等。 2. 搭建 Rancher 服务 直接通过docker命令实现即可&#xff0c;很方便。 docker run -d \--name rancher \--restart unles…

go的并发任务如何优雅的实现错误终止

errgroup使用案例 在Go语言中&#xff0c;并发任务通常通过goroutine来实现&#xff0c;而错误处理和任务终止的优雅性则依赖于适当的同步机制和错误传播策略。 场景: 管理一个任务的一组子任务&#xff0c;每个子任务一个协程每个子任务必须保证都成功&#xff0c;一个出现…

注意!!可能这是系统分析师旧教程最后一次考试,赶紧学起来

系统分析师考试是全国计算机技术与软件专业技术资格考试的高级水平考试之一&#xff0c;它是一项专业考试&#xff0c;旨在通过对计算机系统的规划、分析和设计来培养行业内的专业技术人才。近日在国家版本数据中心&#xff0c;查到系统分析师已经有2024最新版的教程出来了&…

EasyAR_稀疏空间图

EasyAR_稀疏空间图 EasyAR4.6.3 丨 Unity2020.3.15f2 1.创建稀疏空间地图 在EasyAR开发中心后台创建Scene许可证密钥&#xff0c;并且使用稀疏空间地图 2.设置稀疏空间地图库名&#xff0c;对稀疏空间地图进行管理&#xff0c;设置密钥 3.复制密钥到Unity中 添加Spatial Map Ap…

Xml,Json,Protobuffer等序列化的区别。如何选型

Xml,Json,Protobuffer等序列化的区别。如何选型 序列化&#xff1a;将对象转换为字节序列的过程称为对象的序列化&#xff1b; 反序列化&#xff1a;将字节序列恢复为对象的过程称为对象的反序列化&#xff1b; 什么时候需要序列化&#xff1f; 当你需要把内存中的对象保存到一…

深入C# .NET核心:委托与事件机制全解析

摘要&#xff1a; 在C# .NET编程中&#xff0c;委托和事件是实现异步编程和对象间通信的关键机制。理解它们的工作原理对于编写高效、响应式的应用程序至关重要。本文将深入探讨C# .NET中的委托与事件&#xff0c;从基础概念到高级应用&#xff0c;为读者提供全面的指导。 正文…

IDC权威认可:亚信安全引跑中国DDI市场

近日&#xff0c;国际数据公司&#xff08;IDC&#xff09;正式发布了《IDC China Semiannual DDI Tracker, 2023H2》&#xff0c;亚信安全域名服务和地址分配及管理系统&#xff08;AIDDI&#xff09;凭借在企业核心网络防护中自动化、安全性、智能化的突出能力&#xff0c;占…