-
2021-02-13 21:25:16
module hellogin go 1.15 require ( github.com/gin-gonic/gin v1.6.3 github.com/go-sql-driver/mysql v1.5.0 github.com/jinzhu/gorm v1.9.16 )
package main import ( "fmt" "github.com/gin-gonic/gin" _ "github.com/go-sql-driver/mysql" "github.com/jinzhu/gorm" "log" "net/http" ) type User struct { gorm.Model Name string `gorm:"type:varchar(20);not null"` Telephone string `gorm:"varchar(20);not null;unique"` Password string `gorm:"size:255;not null"` } var ( db *gorm.DB err error ) func main() { initDB() defer db.Close() r := gin.Default() r.GET("/ping", func(c *gin.Context) { c.JSON(200, gin.H{ "message": "pong", }) }) // 路由配置 r.POST("/user/create", CreateUser) r.DELETE("/user/:id", DeleteUser) r.GET("/users", ListUser) r.GET("/user/:id", GetUser) r.PUT("/user/:id", UpdateUser) r.Run() } // 数据库连接 func initDB() *gorm.DB { driverName := "mysql" host := "127.0.0.1" port := "3306" database := "test" username := "root" password := "root" charset := "utf8" args := fmt.Sprintf("%s:%s@tcp(%s:%s)/%s?charset=%s&parseTime=true", username, password, host, port, database, charset, ) db, err = gorm.Open(driverName, args) if err != nil { panic("failed to connect database,err:" + err.Error()) } db.DB().SetMaxIdleConns(10) db.DB().SetMaxOpenConns(100) // 全局禁用表名复数 db.SingularTable(true) // 如果设置为true,`User`的默认表名为`user`,使用`TableName`设置的表名不受影响 // 一般不会直接用CreateTable创建表 // 检查模型`User`表是否存在,否则为模型`User`创建表 if !db.HasTable(&User{}) { if err := db.Set("gorm:table_options", "ENGINE=InnoDB").AutoMigrate(&User{}).Error; err != nil { panic(err) } } return db } // 创建用户 func CreateUser(c *gin.Context) { var user User c.BindJSON(&user) // 使用bindJson填充数据 // db.Create(&user) // 创建对象 // c.JSON(http.StatusOK, &user) // 返回页面 if user.Name != "" && user.Password != "" { // if err := db.Create(&user).Error; err != nil { fmt.Println("error 了") c.JSON(400, gin.H{"error": err.Error()}) return } c.JSON(http.StatusOK, gin.H{ "code": 20000, "message": "success", "data": &user, }) } else { c.JSON(422, gin.H{"error": "Fields are empty"}) } } // 删除用户 func DeleteUser(c *gin.Context) { id := c.Params.ByName("id") log.Println("id:", id) if err := db.Where(&User{Name: id}).Delete(User{}).Error; err != nil { c.JSON(500, gin.H{ "msg": "删除失败", "error": err.Error(), }) } c.JSON(http.StatusOK, gin.H{ "msg": "删除成功", "data": "User# " + id + " deleted!", }) // 2 //var user User //db.First(&user, id) //if user.Name { // db.Delete(&user) // c.JSON(http.StatusOK, gin.H{ // "success": "User# " + id + " deleted!", // }) //} else{ // c.JSON(404, gin.H{ // "error": "User not found", // }) //} } // 列出所有用户 func ListUser(c *gin.Context) { var user []User db.Find(&user) c.JSON(http.StatusOK, &user) //限制查找前line行 } // 列出单个用户 func GetUser(c *gin.Context) { var user User id := c.Params.ByName("id") err := db.First(&user, id).Error if err != nil { c.AbortWithStatus(404) fmt.Println(err.Error()) } else { c.JSON(http.StatusOK, &user) } } // 更新用户 func UpdateUser(c *gin.Context) { var user User id := c.Params.ByName("id") err := db.First(&user, id).Error if err != nil { c.AbortWithStatus(404) fmt.Println(err.Error()) } else { c.BindJSON(&user) if err := db.Save(&user).Error; err != nil { c.JSON(http.StatusOK, gin.H{ "message": err.Error(), }) // 返回页面 return } // 提交修改 c.JSON(http.StatusOK, &user) // 返回页面 } }
更多相关内容 -
gin gorm插入数据
2022-01-05 22:48:35 -
gin_curd:基于gin gorm快速生成curd代码
2021-03-10 13:15:43根据模型快速生成基于gin和gorm的嵌入项目 标签: 凝乳 搜索 搜索:喜欢模糊查询 search:true搜索 例子: type TestModel struct { Model Account string `gorm:"account" curd:"search" binding:"required"` ... -
Gin+Gorm开发Golang API快速开发脚手架-Golang开发
2021-05-26 15:18:20Gin+Gorm开发Golang API快速开发脚手架 Singo Singo: Simple Single Golang Web Service go-crud正式改名为Singo! 使用Singo开发Web服务: 用最简单的架构,实现够用的框架,服务海量用户 ... Singo文档 ... -
Golang 使用 gin gorm 编写Restful API(一)
2021-12-22 21:49:45Go编写web server 2.1 添加相关依赖 gin 依赖安装: go get -u github.com/gin-gonic/gin GORM 库安装: go get -u github.com/jinzhu/gorm 2.2 实体类 编写一个实体类student.go与数据的表对应 package entity type ...1. PostgreSQL的安装与使用
1.1 PostgreSQL安装
PostgreSQL的安装比较简单,之前没有使用过的小伙伴们请移步 PostgreSQL安装与使用教程
1.2 建库建表
创建数据库:
CREATE DATABASE test WITH OWNER = postgres;
创建student表:
CREATE TABLE IF NOT EXISTS public.student ( id bigint NOT NULL DEFAULT nextval('t_student_id_seq'::regclass), name text COLLATE pg_catalog."default" NOT NULL, age integer NOT NULL, CONSTRAINT t_student_pkey PRIMARY KEY (id) ) TABLESPACE pg_default; ALTER TABLE IF EXISTS public.t_student OWNER to postgres;
注:这里可以省略表的创建,因为GORM会自动创建一个表名为实体同名复数形式的表
2. Go编写web server
2.1 添加相关依赖
gin 依赖安装:
go get -u github.com/gin-gonic/gin
GORM 库安装:
go get -u github.com/jinzhu/gorm
2.2 实体类
编写一个实体类student.go与数据的表对应
package entity type Student struct { Id int `gorm:"primary_key" json:"id"` Name string `json:"name"` Age int `json:"age"` }
2.3 数据库连接
通过GORM连接postgreSQL,进行数据库的CURD操作
建立连接:
db, err := gorm.Open("postgres", "host=101.35.54.34 port=5432 user=postgres dbname=test password=root sslmode=disable")
注:如果不添加 sslmode=disable,会产生如下error:
pq: SSL is not enabled on the server
新增数据:
func AddStudent(student *entity.Student) { db := ConnectDB() db.Create(student) defer db.Close() }
查询数据:
func GetAll() (students []entity.Student) { db := ConnectDB() // 查询所有 db.Find(&students) defer db.Close() return students }
完成dao.go 代码如下:
package dao import ( "github.com/jinzhu/gorm" _ "github.com/jinzhu/gorm/dialects/postgres" "gorm_demo/entity" "log" ) func ConnectDB() (db *gorm.DB) { db, err := gorm.Open("postgres", "host=127.0.0.1 port=5432 user=postgres dbname=test password=root sslmode=disable") if err != nil { log.Println("connect postgreSQL fail") panic(err) } db.AutoMigrate(&entity.Student{}) return db } func GetAll() (students []entity.Student) { db := ConnectDB() // 查询所有 db.Find(&students) defer db.Close() return students } func AddStudent(student *entity.Student) { db := ConnectDB() db.Create(student) defer db.Close() }
2.3 定义Restful API
通过gin定义api, app.go完成代码如下:
package app import ( "gorm_demo/dao" "gorm_demo/entity" "net/http" ) import "github.com/gin-gonic/gin" func App() { engine := gin.Default() api := engine.Group("/v1/test") { // 查询所有 api.GET("/", func(context *gin.Context) { // 进行查询 students := dao.GetAll() context.JSON(http.StatusOK, gin.H{ "data": students, }) }) // 插入数据 api.POST("/add", func(context *gin.Context) { student := entity.Student{Name: "阿盲", Age: 26} dao.AddStudent(&student) context.JSON(http.StatusOK, gin.H{ "msg": "success", }) }) } // 监听 9090端口 engine.Run(":9090") }
2.4 程序入口
最后是我们程序入口main.go,直接调用APP()方法
package main import "gorm_demo/app" func main() { app.App() }
启动程序,监听9090端口
3. 接口测试
3.1 插入数据
GET http://localhost:9090/v1/test
使用Postman发起请求,由于具体的数据是在代码中写死插入,所以没有进行穿参,返回的结果与代码中的返回一致
3.2 查询数据
通过查询接口验证插入数据是否成功
POST http://localhost:9090/v1/test/add
查询出的与之前插入的数据一致,所以接口测试成功!4. 项目结构图
-
go gin gorm设置时间格式
2021-04-01 15:20:19//自定义gorm.Model type GORM_MODEL struct { ID uint `gorm:"primary_key"` CreatedAt MyTime `gorm:"comment:'创建时间';type:datetime;"` UpdatedAt MyTime `gorm:"comment:'修改时间';type:datetime;"` //...package global import ( "time" ) //自定义gorm.Model type GORM_MODEL struct { ID uint `gorm:"primary_key"` CreatedAt MyTime `gorm:"comment:'创建时间';type:datetime;"` UpdatedAt MyTime `gorm:"comment:'修改时间';type:datetime;"` //CreatedAt time.Time //UpdatedAt time.Time DeletedAt *time.Time `sql:"index"` }
package global import ( "database/sql/driver" "errors" "fmt" "strings" "time" ) //MyTime 自定义时间 type MyTime time.Time func (t *MyTime) UnmarshalJSON(data []byte) error { if string(data) == "null" { return nil } var err error //前端接收的时间字符串 str := string(data) //去除接收的str收尾多余的" timeStr := strings.Trim(str, "\"") t1, err := time.Parse("2006-01-02 15:04:05", timeStr) *t = MyTime(t1) return err } func (t MyTime) MarshalJSON() ([]byte, error) { formatted := fmt.Sprintf("\"%v\"", time.Time(t).Format("2006-01-02 15:04:05")) return []byte(formatted), nil } func (t MyTime) Value() (driver.Value, error) { // MyTime 转换成 time.Time 类型 tTime := time.Time(t) return tTime.Format("2006-01-02 15:04:05"), nil } func (t *MyTime) Scan(v interface{}) error { switch vt := v.(type) { case time.Time: // 字符串转成 time.Time 类型 *t = MyTime(vt) default: return errors.New("类型处理错误") } return nil } func (t *MyTime) String() string { return fmt.Sprintf("hhh:%s", time.Time(*t).String()) }
-
singo:Gin+Gorm开发Golang API快速开发脚手架
2021-05-08 05:18:38: Gin框架提供的Session操作工具 : Golang Redis客户端 : 开发环境下的环境变量工具,方便使用环境变量 : Gin框架提供的跨域中间件 自行实现了国际化i18n的一些基本功能 本项目是使用基于cookie实现的session来保存... -
Gin gorm zap golang 基本实现
2019-10-07 15:57:06golang3 -
gin-web:由gin + gorm + jwt + casbin组合实现的RBAC权限管理脚手架Golang版, 搭建完成即可快速、高效投入...
2021-04-30 18:14:31Gin Web由gin + gorm + jwt + casbin组合实现的RBAC权限管理脚手架Golang版, 搭建完成即可快速、高效投入业务开发特性RESTful API 设计规范Gin 一款高效的golang web框架MySQL 数据库存储Jwt 用户认证, 登入登出一键... -
gin-admin:基于Gin + Gorm + Casbin + Wire的RBAC脚手架
2021-04-29 17:07:35Gin Admin 基于 GIN + GORM + CASBIN + WIRE 实现的RBAC权限管理脚手架,目的是提供一套轻量的中后台开发框架,方便、快速的完成业务需求的开发。特性遵循 RESTful API 设计规范 & 基于接口的编程规范基于 GIN 框架... -
gin-gorm 简单了解
2022-01-12 22:06:35ORM优缺点 优点 提高开发效率 ... _ "github.com/jinzhu/gorm/dialects/mysql" ) type UserInfo struct { ID int Name string Gender string Hobby string } func main() { // 连接数据库 d -
GoWeb学习笔记: gin gorm
2022-05-28 18:02:19GoWeb学习笔记: gin gorm 参考视频:【最新Go Web开发教程】基于gin框架和gorm的web开发实战 (七米出品)_哔哩哔哩_bilibili Http示例 创建项目: http:Go语言基础之net/http | 李文周的博客 示例: package ... -
Gin框架结合gorm使用
2021-02-02 15:50:04Gin框架结合Gorm使用 目录 Gin框架结合Gorm使用 前言 一、介绍 二、使用步骤 1.创建项目 2.开始main.go 3.router的初始化 4.controller的初始化 5.services的初始化 6.models的初始化 7.my.init的初始化... -
Go Web学习笔记(Gin和Gorm)
2021-10-21 22:34:14之前已经把go的基础语法过了一遍,现在学习Gin和Gorm框架,特此记录一下,也希望对你们有帮助 这里顺便再提供一下Go基础语法的中文官方文档 Gin框架 用go原生的https包写hello world package main import ( "fmt" ... -
Go (Gin+Gorm)开发博客教程
2022-03-14 22:37:38"gorm.io/driver/mysql" "gorm.io/gorm" "gorm.io/gorm/logger" "gorm.io/gorm/schema" ) // 定义db全局变量 var Db *gorm.DB func init() { var err error dsn := "root:root@tcp(127.0.0.1:3306)/gin-blog-... -
gin框架学习-Gorm入门指南
2022-07-06 20:30:40Gorm入门指南 -
Gin使用GORM进行CURD
2022-06-20 12:51:05Gin GORM CURD ## 1、Field-Level Permission(字段级权限) 使用 GORM 进行 CRUD 时,导出的字段具有所有权限,并且 GORM 允许使用标签更改字段级别的权限,因此您可以将字段的权限进行操作。比如:只读、只写、只... -
gin框架学习三之gorm
2022-06-27 14:39:51gorm 使用学习 -
ginblog:gin + gorm + vue + mysql
2021-02-17 00:33:01杜松子酒博客 gin + gorm + vue + mysql -
Gin+Gorm+PostGresSQL+Vue项目实战(1)
2022-05-29 23:32:52【评论送书】Go语言 Gin+Vue 前后端分离实战 - OceanLearn_哔哩哔哩_bilibili 1、实现用户注册代码: package main import ( "log" "math/rand" "net/http" "time" "github.com/gin-gonic/gin" ) func ... -
GIN试玩:GORM增删改查分页
2021-12-22 11:49:52首先,将数据库表转换为结构体,在线转结构体 Model // Model/user.go type UserRole struct { Id int `gorm:"column:id" db:"id" json:"id" form:"id"` ... Name string `gorm:"column:name" db:"name -
【Go语言实战】(3) Gin + Gorm 简单备忘录 | 含接口文档
2021-10-09 23:34:09目录 Todo List 备忘录 接口文档 项目主要功能介绍 项目部分代码介绍 项目主要依赖: 项目结构 简要说明 项目运行 最后 Todo List 备忘录 此项目使用Gin+Gorm ,基于RESTful API实现的一个备忘录。 规范是非常重要的... -
简单搭建 Gin + GORM MVC 框架
2021-07-30 13:35:56参考GORM 指南 目录结构 controller:负责请求转发,接受页面过来的参数,传给 Model 处理,接到返回值,再传给页面。 database:通过 gorm 连接数据库。 models:对应数据表的增删查改。 router:处理路由。... -
Gin-使用GORM操作mysql 数据库
2022-06-20 12:51:09本文已参与「新人创作礼」活动,一起开启掘金创作之路。 1、使用GORM操作mysql 数据库 1、GORM概述 GORM是Golang的一个orm 框架(采用元数据来描述对象与关系映射...2、Gin 中使用 GORM ### 1、毫无疑问,安装 ``... -
基于Gin、Gorm实现的在线练习系统之项目梳理
2022-06-09 22:25:20go/gin/gorm/mysql等环境搭建略过;首先使用Navicat新建一个数据库用于本项目,内容如下图: 在本库中新建问题表如下图: 我们正常的项目逻辑(项目流程)应该是我们定义完一张表之后我们需要去我们的gorm里面把它的 ... -
Golang gin+gorm组合简单实例。
2019-05-16 18:33:01一、code package main import ( ... "github.com/gin-gonic/gin" "github.com/jinzhu/gorm" _ "github.com/jinzhu/gorm/dialects/mysql" "time" ) type Like struct { ID int `gorm:"primary_k... -
Gin+Gorm+Casbin实现权限控制demo
2021-03-27 15:56:32gin.HandlerFunc { return func(c *gin.Context) { //获取资源 obj := c.Request.URL.RequestURI() //获取方法 act := c.Request.Method //获取实体 sub := "admin" //判断策略中是否存在 enforce ... -
【go商城】gin+gorm实现CRUD
2022-06-13 21:11:54ORM-Object-Relationl ...GORM就是go语言实现的一个ORM库 特点:增加(Create) 检索(Retrieve) 更新(Update) 删除(Delete) 如果模型中有 DeletedAt 字段,它将自动拥有软删除的能力!当执行删除操作时,数据并不会永久 -
Gin+Gorm+Kite进行微服务设计下的后端开发——预备知识
2022-02-26 00:12:21前言:接下来的一段时间将进行一项关于用Gin、Gorm、Kite进行后端开发的工作,打算在这里记录下学习的进度。今天,先跟大家分享一些开发前的预备知识,做好实战前的知识储备! 文章目录1.web开发本质2.前后端分离3.... -
gin结合gorm实现mysql增删改查
2020-11-09 11:54:52https://gin-gonic.com/ https://gorm.io/zh_CN/docs/index.html https://github.com/gin-gonic/gin/ https://github.com/go-gorm/gorm 集成 go mod方式 require ( github.com/gin-contrib/sessions v0.0.3 ...