精华内容
下载资源
问答
  • gin gorm
    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
  • 根据模型快速生成基于gingorm的嵌入项目 标签: 凝乳 搜索 搜索:喜欢模糊查询 search:true搜索 例子: type TestModel struct { Model Account string `gorm:"account" curd:"search" binding:"required"` ...
  • Gin+Gorm开发Golang API快速开发脚手架 Singo Singo: Simple Single Golang Web Service go-crud正式改名为Singo! 使用Singo开发Web服务: 用最简单的架构,实现够用的框架,服务海量用户 ... Singo文档 ...
  • 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 ...

    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())
    }
    

    成功后

    展开全文
  • : Gin框架提供的Session操作工具 : Golang Redis客户端 : 开发环境下的环境变量工具,方便使用环境变量 : Gin框架提供的跨域中间件 自行实现了国际化i18n的一些基本功能 本项目是使用基于cookie实现的session来保存...
  • Gin gorm zap golang 基本实现

    千次阅读 2019-10-07 15:57:06
    golang3
  • Gin Web由gin + gorm + jwt + casbin组合实现的RBAC权限管理脚手架Golang版, 搭建完成即可快速、高效投入业务开发特性RESTful API 设计规范Gin 一款高效的golang web框架MySQL 数据库存储Jwt 用户认证, 登入登出一键...
  • Gin Admin 基于 GIN + GORM + CASBIN + WIRE 实现的RBAC权限管理脚手架,目的是提供一套轻量的中后台开发框架,方便、快速的完成业务需求的开发。特性遵循 RESTful API 设计规范 & 基于接口的编程规范基于 GIN 框架...
  • gin-gorm 简单了解

    2022-01-12 22:06:35
    ORM优缺点 优点 提高开发效率 ... _ "github.com/jinzhu/gorm/dialects/mysql" ) type UserInfo struct { ID int Name string Gender string Hobby string } func main() { // 连接数据库 d
  • GoWeb学习笔记: gin gorm 参考视频:【最新Go Web开发教程】基于gin框架和gorm的web开发实战 (七米出品)_哔哩哔哩_bilibili Http示例 创建项目: http:Go语言基础之net/http | 李文周的博客 示例: package ...
  • Gin框架结合gorm使用

    千次阅读 2021-02-02 15:50:04
    Gin框架结合Gorm使用 目录 Gin框架结合Gorm使用 前言 一、介绍 二、使用步骤 1.创建项目 2.开始main.go 3.router的初始化 4.controller的初始化 5.services的初始化 6.models的初始化 7.my.init的初始化...
  • 之前已经把go的基础语法过了一遍,现在学习GinGorm框架,特此记录一下,也希望对你们有帮助 这里顺便再提供一下Go基础语法的中文官方文档 Gin框架 用go原生的https包写hello world package main import ( "fmt" ...
  • "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-...
  • Gorm入门指南
  • Gin使用GORM进行CURD

    2022-06-20 12:51:05
    Gin GORM CURD ## 1、Field-Level Permission(字段级权限) 使用 GORM 进行 CRUD 时,导出的字段具有所有权限,并且 GORM 允许使用标签更改字段级别的权限,因此您可以将字段的权限进行操作。比如:只读、只写、只...
  • gin框架学习三之gorm

    2022-06-27 14:39:51
    gorm 使用学习
  • 杜松子酒博客 gin + gorm + vue + mysql
  • 【评论送书】Go语言 Gin+Vue 前后端分离实战 - OceanLearn_哔哩哔哩_bilibili 1、实现用户注册代码: package main import ( "log" "math/rand" "net/http" "time" "github.com/gin-gonic/gin" ) func ...
  • 首先,将数据库表转换为结构体,在线转结构体 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
  • 目录 Todo List 备忘录 接口文档 项目主要功能介绍 项目部分代码介绍 项目主要依赖: 项目结构 简要说明 项目运行 最后 Todo List 备忘录 此项目使用Gin+Gorm ,基于RESTful API实现的一个备忘录。 规范是非常重要的...
  • 参考GORM 指南 目录结构 controller:负责请求转发,接受页面过来的参数,传给 Model 处理,接到返回值,再传给页面。 database:通过 gorm 连接数据库。 models:对应数据表的增删查改。 router:处理路由。...
  • 本文已参与「新人创作礼」活动,一起开启掘金创作之路。 1、使用GORM操作mysql 数据库 1、GORM概述 GORM是Golang的一个orm 框架(采用元数据来描述对象与关系映射...2、Gin 中使用 GORM ### 1、毫无疑问,安装 ``...
  • go/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.HandlerFunc { return func(c *gin.Context) { //获取资源 obj := c.Request.URL.RequestURI() //获取方法 act := c.Request.Method //获取实体 sub := "admin" //判断策略中是否存在 enforce ...
  • ORM-Object-Relationl ...GORM就是go语言实现的一个ORM库 特点:增加(Create) 检索(Retrieve) 更新(Update) 删除(Delete) 如果模型中有 DeletedAt 字段,它将自动拥有软删除的能力!当执行删除操作时,数据并不会永久
  • 前言:接下来的一段时间将进行一项关于用GinGorm、Kite进行后端开发的工作,打算在这里记录下学习的进度。今天,先跟大家分享一些开发前的预备知识,做好实战前的知识储备! 文章目录1.web开发本质2.前后端分离3....
  • gin结合gorm实现mysql增删改查

    千次阅读 2020-11-09 11:54:52
    https://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 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,111
精华内容 844
关键字:

gin gorm