主要用于记录gorm的配置、初始化(不包含yaml/ini等配置文件版本)
golang 基础篇1(gin 路由初始化 +gorm 初始化及配置)
1.创建项目
1.1初始化项目
go mod init gormDemo
创建main.go
package main
func main() {
}
1.2安装gin
go get -u github.com/gin-gonic/gin
1.3安装gorm和mysql
go get -u gorm.io/gorm
go get -u gorm.io/driver/mysql
2.创建global文件夹
gormDemo
-global
-initGlobal.go
-initGorm.go
-src
-main.go
gloabl/initGorm.go
package global
import (
"fmt"
"gorm.io/driver/mysql"
"gorm.io/gorm"
"log"
)
func InitGorm() *gorm.DB {
dsn := "root:xxx12345@tcp(127.0.0.1:3306)/newDemo?charset=utf8mb4&parseTime=True&loc=Local"
mysqlConfig := mysql.Config{
DSN: dsn, // DSN data source name
DefaultStringSize: 255, // string 类型字段的默认长度
DisableDatetimePrecision: true, // 禁用 datetime 精度,MySQL 5.6 之前的数据库不支持
DontSupportRenameIndex: true, // 重命名索引时采用删除并新建的方式,MySQL 5.7 之前的数据库和 MariaDB 不支持重命名索引
DontSupportRenameColumn: true, // 用 `change` 重命名列,MySQL 8 之前的数据库和 MariaDB 不支持重命名列
SkipInitializeWithVersion: false, // 根据版本自动配置
}
if db, err := gorm.Open(mysql.New(mysqlConfig), &gorm.Config{}); err != nil {
log.Fatal("mysql链接失败!")
return nil
} else {
// 获取通用数据库对象 sql.DB ,然后使用其提供的功能
sqlDB, _ := db.DB()
// SetMaxIdleConns 用于设置连接池中空闲连接的最大数量。
sqlDB.SetMaxIdleConns(10)
// SetMaxOpenConns 设置打开数据库连接的最大数量。
sqlDB.SetMaxOpenConns(100)
fmt.Println("mysql连接成功")
return db
}
}
global/initGlobal.go
package global
import "gorm.io/gorm"
//设置global包下的全局变量 DB
var DB *gorm.DB
func InitGlobal() {
//初始化数据库 赋值给db
DB = InitGorm()
}
3.创建src文件夹
目录如下:
gormDemo
-global
-src
-controller
user.go
-model
common.go
user.go
-router
user.go
router.go
-go.mod
-main.go
router.go
package router
import "github.com/gin-gonic/gin"
var R *gin.Engine
func InitRouter() {
R = gin.Default()
//调用user.go中的初始化函数,初始化user路由分组
InitUserRouter()
R.Run(":9001")
}
router/user.go
package router
import "gormDemo/src/controller"
func InitUserRouter() {
r := R.Group("/user")
{
//调用userController Create
r.GET("/register", controller.UserController{}.Create)
}
}
controller/user.go
package controller
import "github.com/gin-gonic/gin"
type UserController struct {
}
// Create controller 控制器调用model层
func (UserController) Create(c *gin.Context) {
//逻辑处理
}
model/user.go
package model
//定义mysql模型
type User struct {
//将Com 自定义的结构体通过 gorm:embedded 合并到模型中 用来代替gorm自带的Model
Com `gorm:embedded`
Account string `json:"account" form:"account"`
password string `json:"password" form:"password"`
}
//TableName 表示数据库名称为user
func (User) TableName() string {
return "user"
}
//数据库交互 使用global中初始化好的DB进行数据库交互
func (User) Create() {
//自动迁移数据库
global.DB.AutoMigrate(&User{})
}
gorm:embedded 代表嵌入字段
model/common.go
package model
import (
"gorm.io/gorm"
"time"
)
// Common 通用model 自定义需要使用的 id created_at deleted_at updated_at
type Com struct {
ID uint `gorm:"primaryKey" json:"id"`
CreatedAt time.Time `json:"created_at"`
UpdatedAt time.Time `json:"updated_at"`
DeletedAt gorm.DeletedAt `gorm:"index" json:"deleted_at"`
}