当前位置: 首页 > news >正文

南昌网站设计网站建设推广信息

南昌网站设计,网站建设推广信息,摄影网站在线建设,化妆品网站建设案例目录 项目介绍 简介 技术 项目结构 项目分析 总结 项目介绍 简介 项目地址#xff1a;knoci/list: 基于Gin的待办清单小项目 (github.com) 一个仿照github/Q1mi/bubble 做的一个gin框架练习 技术 gin 框架gorm 操作PostgreSQLini 配置文件 项目结构 list ├── R…目录 项目介绍 简介 技术 项目结构 项目分析 总结  项目介绍 简介 项目地址knoci/list: 基于Gin的待办清单小项目 (github.com) 一个仿照github/Q1mi/bubble 做的一个gin框架练习 技术 gin 框架gorm 操作PostgreSQLini 配置文件 项目结构 list ├── README.md ├── config │ └── config.ini ├── controller │ └── controller.go ├── dao │ └── postgresql.go ├── go.mod ├── go.sum ├── main.go ├── models │ └── todo.go ├── routers │ └── routers.go ├── static │ ├── css │ │ ├── app.8eeeaf31.css │ │ └── chunk-vendors.57db8905.css │ ├── fonts │ │ ├── element-icons.535877f5.woff │ │ └── element-icons.732389de.ttf │ └── js │ ├── app.007f9690.js │ └── chunk-vendors.ddcb6f91.js └── templates├── favicon.ico└── index.html 项目分析 项目中有configcontrollersdaomodelsroutersstatictemplate这7个文件夹。 config保存ini文件配置连接数据库的参数(Port,User,Password...)controllers保存控制函数实现器功能处理web响应dao连接数据库models是各种数据结构模板定义routers负责路由分组和路由处理static存储静态资源template是前端模板 接下来我们从mian.go开始逐步分析整个项目的运行。 package mainimport (list/daolist/modelslist/routers//_ gorm.io/driver/mysql_ gorm.io/driver/postgres )func main() {//连接数据库dao.Connect()//模型绑定dao.DB.AutoMigrate(models.Todo{})//启动routerrouters.SetupRouter() }在main.go中我们导入了同文件夹下的daomodelsrouters随后运行第一个函数 dao.Connect()接下来我们进入dao来看看 dao.Connect() 函数实现了什么功能。 package daoimport (fmtgopkg.in/ini.v1//gorm.io/driver/mysqlgorm.io/driver/postgresgorm.io/gorm )var (DB *gorm.DB )type MysqlConfig struct {User string ini:userPassword string ini:passwordHost string ini:hostPort string ini:portDBname string ini:db }func LoadConfig() *MysqlConfig {//development_通过结构体映射参数c : new(MysqlConfig)ini.MapTo(c, config/config.ini)fmt.Println(c)return c }func Connect() {c : LoadConfig()dsn : fmt.Sprintf(host%s user%s password%s dbname%s port%s, c.Host, c.User, c.Password, c.DBname, c.Port)/* mysqldsn : fmt.Sprintf(%s:%stcp(%s:%s)/%s?charsetutf8mb4parseTimeTruelocLocal,c.User, c.Password, c.Host, c.Port, c.DBname)dsn : root:root1234tcp(127.0.0.1:13306)/bubble?charsetutf8mb4parseTimeTruelocLocal*/var err errorDB, err gorm.Open(postgres.Open(dsn), gorm.Config{}) // connect// mysql DB, err gorm.Open(mysql.Open(dsn), gorm.Config{})if err ! nil {panic(err.Error())}fmt.Print(连接数据库成功\n) } 在postgresql.go中导入了GORMPG驱动ini包自定义了结构体Mysqlconfig和一个 导包全局可访问的 gorm.DB类型的指针DB封装了一个函数 LoadConfig() 通过ini.MapTo(c, config/config.ini) 来接收配置文件。 在Connect函数中调用LoadConfig()获得配置用Sprintf()把配置复制到dsn,然后通过gorm.Open方法连接到我们的数据库。 dao.Connect()完成后我们继续回到main.go用dao包内变量DB的内置方法 dao.DB.AutoMigrate(models.Todo{}) 实现了模型绑定实际上就是按照models.Todo结构体在数据库中创建了一张表。 package modelstype Todo struct {ID int json:idTitle string json:titleStatus bool json:status } Todo表中每个待办事项有IDTitleStatus并且有相应JOSN的tag。其中ID是用来标识事项的自增唯一值Title是事务名Status用0和1表示未完成和完成。 回到main.go最后调用了routers.SetupRouter()这是在本地routers包routers.go里的函数。在SetupRouter中使用gin.Default()注册默认路由r然后用r.Static()导入./static目录下静态文件指定为static接着用r.LoadHTMLGlob()导入当前路径template/*的模板。 接着就是路由处理指定了对/的GET请求回应controllers.ShowIndex函数用r.Group()定义了路由组v1Group。 路由组中指定了对todo的POST请求回应controllers.CreateTodo函数对/todo的GET请求回应controllers.RetrieveTodo函数对/todo/:id的PUT请求回应controllers.UpdateTodo函数对/todo/:id的DELETE请求回应controllers.DeleteTodo函数。 最后用r.Run(:9090)在9090端口上监听并运行。 package routersimport (github.com/gin-gonic/ginlist/controllers )func SetupRouter() {r : gin.Default()r.Static(/static, static)r.LoadHTMLGlob(template/*)r.GET(/, controllers.ShowIndex)v1Group : r.Group(v1){//添加v1Group.POST(todo, controllers.CreateTodo)//查看v1Group.GET(/todo, controllers.RetrieveTodo)//修改v1Group.PUT(/todo/:id, controllers.UpdateTodo)//删除v1Group.DELETE(/todo/:id, controllers.DeleteTodo)}r.Run(:9090)} 接下来看看controller中的各个函数的功能首先是ShowIndex负责返回状态码200展示index.html。 func ShowIndex(c *gin.Context) {c.HTML(http.StatusOK, index.html, nil) } CreateTodo 用来创建一个待办事项。在接收到传来的数据后定义一个models.Todo类型的todo结构体然后用 c.ShouldBind(todo) 自动的进行响应格式(这里是JSON)的参数绑定到todo然后通过 dao.DB.Create(todo) 把todo存入数据库DB以JSON格式失败返回报错成功返回todo。 func CreateTodo(c *gin.Context) {//get datavar todo models.Todoc.ShouldBind(todo)//add into databaseerr : dao.DB.Create(todo).Error//returnif err ! nil {c.JSON(http.StatusBadRequest, gin.H{error: err.Error()})return} else {c.JSON(http.StatusOK, todo)}} RetrieveTodo 用来获取所有待办事项创建一个结构体数组todos用 dao.DB.Find(todos) 把所有的表数据给到todos以JSON格式失败返回报错成功返回todos。 func RetrieveTodo(c *gin.Context) {var todos []models.Todoif err : dao.DB.Find(todos).Error; err ! nil {c.JSON(http.StatusOK, gin.H{error: err.Error()})return} else {c.JSON(http.StatusOK, todos)} } UpdateTodo 用来更新指定的事项用 c.Params.GET(id) 获得要修改事项名为id的指定url定义todo结构体然后用 dao.DB.Where(id?, id).First(todo) 来查询数据库中第一个对应id的数据到todo然后 c.BindJSON(todo) 把方法请求体c以JSON绑定到todo最后 dao.DB.Save(todo) 来更新数据库。 func UpdateTodo(c *gin.Context) {id, ok : c.Params.Get(id)if !ok {c.JSON(http.StatusOK, gin.H{error: id invalid})return}var todo models.Todoif err : dao.DB.Where(id?, id).First(todo).Error; err ! nil {c.JSON(http.StatusOK, gin.H{error: err.Error()})return}c.BindJSON(todo) //修改if err : dao.DB.Save(todo).Error; err ! nil {c.JSON(http.StatusOK, gin.H{error: err.Error()})} else {c.JSON(http.StatusOK, todo)} } DeletTodo 用来删除一个待办事项还是通过 c.Params.GET(id) 获得要修改事项名为id的指定url用 dao.DB.Where(id?, id).Delete(models.Todo{}) 来删除数据库中对应id的数据因为这里不接收请求体没有定义局部变量结构体所以直接传入model.Todo{}指定表格式。 总结  这个项目是Gin和GORM的非常非常简单的小项目适合新手入门。
http://www.hkea.cn/news/14359619/

相关文章:

  • 影视公司招聘当阳seo外包
  • 网站平台设计费用开发一款网络游戏需要多少钱
  • 网站建设现况分析建筑资料网站大全
  • 电信网站备案查询php 企业 网站
  • 打开网站要密码网页样式与布局
  • 手机app制作网站网络推广哪个平台好
  • 购物网站建设方案ppt沈阳红方城网站建设
  • 太原网站域名开发做网站公司名字应该用图片吗
  • 网站开发包开发者模式有什么危害
  • 网站优化 检测响应速度宁夏网站建设价格
  • 给个网站好人有好报2021中国建设银行信用卡
  • 常德网站建设多少钱移动互联网开发课程设计选题
  • 山西网站建设方案a级生活片免费
  • 合肥营销型网站建设公司写作网站哪个名声好
  • 网站排版教程东明住房和城乡建设局网站
  • 什么网站做推广最好打开网站自动跳转代码
  • 网站建设和客户面谈东莞正规网站建设
  • 网站备案撤销wordpress 如何开发
  • 微企业网站模板免费wordpress快速发文章
  • 英文公司网站模板wordpress 多页
  • 站群系统开发女和男做的视频网站
  • 电子商务网站开发实训总结报告新网站做内链
  • html怎么做网站后台白银市建设局网站王浩
  • 做外贸网站维护费是多少深圳招聘信息在哪个网站
  • 北京搜狗建网站的电话wordpress 感染支付宝
  • 十大网站黄页免费浙江第一水电建设集团网站
  • 网站模板文件不存在创建网页的三种方法
  • 网页建站总结报告c 做的网站怎么上传
  • 仿门户网站网站开发与维护项目招标
  • 广州建设网站制作企梦网站建设