Go框架快速入门| 青训营笔记

109 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 2 天

GIN+GORM框架快速入门:

首先当然是它的特性:

(来自官方文档)

  • 全功能 ORM
  • 关联 (Has One,Has Many,Belongs To,Many To Many,多态,单表继承)
  • Create,Save,Update,Delete,Find 中钩子方法
  • 支持 PreloadJoins 的预加载
  • 事务,嵌套事务,Save Point,Rollback To Saved Point
  • Context、预编译模式、DryRun 模式
  • 批量插入,FindInBatches,Find/Create with Map,使用 SQL 表达式、Context Valuer 进行 CRUD
  • SQL 构建器,Upsert,数据库锁,Optimizer/Index/Comment Hint,命名参数,子查询
  • 复合主键,索引,约束
  • Auto Migration
  • 自定义 Logger
  • 灵活的可扩展插件 API:Database Resolver(多数据库,读写分离)、Prometheus…
  • 每个特性都经过了测试的重重考验
  • 开发者友好

安装:

我用的是mysql,那么我们就要先导包

go get -u gorm.io/gorm
go get -u gorm.io/driver/mysql

快速入门:

根据项目框架,一般分为service,dao,controller,model

我们在持久层dao去连接数据库

当然在此之前,我们应该去创建模型:

在这里我创建好了一个User的模型

用户一般有id,username和password

package model

import "gorm.io/gorm"
//用户模型
type User struct {
   gorm.Model
   ID       uint   `json:"id"`
   Username string `json:"username"`
   Password string `json:"password"`
}

模型创建好后,我们接着在dao里面进行数据库的连接

这里简单的运用了单例工程模式去实现连接数据库后的初始化:

package dao

import (
   "blog/model"
   "gorm.io/driver/mysql"
   "gorm.io/gorm"
   "log"
)
//接口
type Manager interface {
   AddUser(user *model.User)
}
type manager struct {
   db *gorm.DB
}

var Mgr Manager
//初始化
func init() {
   dsn := "root:123@tcp(127.0.0.1:3306)/goDemo_db?charset=utf8mb4&parseTime=True&loc=Local"
   db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
   if err != nil {
      log.Fatal("连接初始化数据库失败", err)
   }
   Mgr = &manager{db: db}
   db.AutoMigrate(&model.User{})

}
//操作数据库
func (m *manager) AddUser(user *model.User) {

   m.db.Create(user)
}

接着就是去路由

我们一般把请求都写在路由里面

同时也启动了Gin框架

像这样:

package router

import (
   "blog/controller"
   "github.com/gin-gonic/gin"
)

func Start() {
//路由
   e := gin.Default()
   e.POST("/users", controller.AddUser)
   e.Run()
}

这样我们就能在不同的层去完成不同层应该完成的任务: