Golang gin+gorm组合简单实例。

一、code

package main

import (
	//"fmt"
	"github.com/gin-gonic/gin"
	"github.com/jinzhu/gorm"
	_ "github.com/jinzhu/gorm/dialects/mysql"
	"time"
)

type Like struct {
	ID        int    `gorm:"primary_key"`
	Ip        string `gorm:"type:varchar(20);not null;index:ip_idx"`
	Ua        string `gorm:"type:varchar(256);not null;"`
	Title     string `gorm:"type:varchar(128);not null;index:title_idx"`
	Hash      int64 `gorm:"unique_index:hash_idx;"`
	CreatedAt time.Time
}

var db *gorm.DB

func init() {
	var err error
	db, err = gorm.Open("mysql", "root:123456@(127.0.0.1:3306)/test?charset=utf8&parseTime=True&loc=Local")
	if err != nil {
		panic(err)
	}
}

func main() {
	//fmt.Println("qwer");
	//创建表
	if !db.HasTable(&Like{}) {
		if err := db.Set("gorm:table_options", "ENGINE=InnoDB DEFAULT CHARSET=utf8").CreateTable(&Like{}).Error; err != nil {
			panic(err)
		}
	}
	//创建新数据
	//createOne()

	//更新数据
	//modify()

	//删除数据
	//move()

	r := gin.Default()
	r.GET("/ping", func(c *gin.Context) {
		c.JSON(200, gin.H{
			"message": "pong",
		})
	})

	r.GET("/zzz", func(c *gin.Context) {
		c.JSON(200, gin.H{
			"status":true,
			"message": "ok",
			"code":200001,
		})
	})

	//我的喜欢列表
	r.GET("/like/list", readById)
	
	r.Run() // listen and serve on 0.0.0.0:8080
}

//插入数据。
func createOne()  {
	ip := "127.0.0.1"
	ua := "mac"
	title := "title"

	var now time.Time
	now = time.Now()
	secs := now.Unix()

	like := &Like{
		Ip:        ip,
		Ua:        ua,
		Title:     title,
		Hash:      secs,
		CreatedAt: time.Now(),
	}

	if err := db.Create(like).Error; err != nil {
		panic(err)
	}
}

//更新数据。
func modify() bool {
	//db.Model(&Like).Update("name", "hello")
	if err := db.Model(&Like{}).Updates(&Like{Ua: "chrome", Title: "modify"}).Where(&Like{Hash: 5555}).Error;err != nil {
		return false
	}
	return true
	//db.Model(&Like).Updates(User{Name: "", Age: 0, Actived: false})
}

func move() bool  {
	if err := db.Where(&Like{Hash: 5555}).Delete(Like{}).Error; err != nil {
		return false
	}
	return true
}

func readById(c *gin.Context) {
	err := db.Find(&Like{}).First(&Like{}).Error
	if err != nil {
		panic(err)
	}

	results := make([]Like, 0)
	rows, err := db.Model(&Like{}).Where("ua = ?", "mac").Select("id, ip, ua, title, hash, created_at").Rows() // (*sql.Rows, error)
	defer rows.Close()
	for rows.Next() {
		var likesSimple Like
		rows.Scan(&likesSimple.ID, &likesSimple.Ip, &likesSimple.Ua, &likesSimple.Title, &likesSimple.Hash, &likesSimple.CreatedAt)
		results = append(results, likesSimple)
	}
	//return results
	c.JSON(200, gin.H{
		"status":true,
		"message": "ok",
		"code":200001,
		"data":results,
	})
}

二、资料说明:
1、gin参考:https://github.com/gin-gonic/gin
2、gorm参考:

  • https://gorm.io/zh_CN/docs/index.html
  • https://jasperxu.github.io/gorm-zh/

你可能感兴趣的:(技术)