package main import ( "fmt" "strconv" "github.com/gin-gonic/gin" "gorm.io/driver/mysql" "gorm.io/gorm" ) type Student struct { gorm.Model Name string Age uint64 } // 全局数据库 db var db *gorm.DB // 包初始化函数,可以用来初始化 gorm func init() { // 账号 username := "root" // 密码 password := "123456" // mysql 服务地址 host := "127.0.0.1" // 端口 port := 3306 // 数据库名 Dbname := "demo" // 拼接 mysql dsn,即拼接数据源,下方 {} 中的替换参数即可 // {username}:{password}@tcp({host}:{port})/{Dbname}?charset=utf8&parseTime=True&loc=Local&timeout=10s&readTimeout=30s&writeTimeout=60s // timeout 是连接超时时间,readTimeout 是读超时时间,writeTimeout 是写超时时间,可以不填 dsn := fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?charset=utf8&parseTime=True&loc=Local", username, password, host, port, Dbname) // err var err error // 连接 mysql 获取 db 实例 db, err = gorm.Open(mysql.Open(dsn), &gorm.Config{}) if err != nil { panic("连接数据库失败, error=" + err.Error()) } // 设置数据库连接池参数 sqlDB, _ := db.DB() // 设置数据库连接池最大连接数 sqlDB.SetMaxOpenConns(10) // 连接池最大允许的空闲连接数,如果没有sql任务需要执行的连接数大于2,超过的连接会被连接池关闭 sqlDB.SetMaxIdleConns(2) // 建表 db.AutoMigrate(&Student{}) } func main() { router := gin.Default() router.GET("/", func(c *gin.Context) { c.JSON(200, gin.H{ "message": "hello world", }) }) router.GET("/create", func(c *gin.Context) { name := c.DefaultQuery("name", "小王子") ageStr := c.DefaultQuery("age", "1") var age uint64 var err error if age, err = strconv.ParseUint(ageStr, 10, 32); err != nil { age = 1 } fmt.Printf("name [%v], age [%v]\n", name, age) student := &Student{ Name: name, Age: age, } if err := db.Create(student).Error; err != nil { c.JSON(500, gin.H{ "code": 0, "message": "insert db error", }) return } c.JSON(200, gin.H{ "code": 0, "message": fmt.Sprintf("insert db success [%+v]", student.Model.ID), }) }) router.Run() }