百万级并发IM即时消息系统(2)

1.用户model


type UserBasic struct {
	gorm.Model
	Name          string
	PassWord      string
	Phone         string `valid:"matches(^1[3-9]{1}\\d{9}$)"`
	Email         string `valid:"email"`
	Avatar        string //头像
	Identity      string
	ClientIp      string
	ClientPort    string
	Salt          string
	LoginTime     time.Time
	HeartbeatTime time.Time
	LoginOutTime  time.Time `gorm:"column:login_out_time" json:"login_out_time"`
	IsLogout      bool
	DeviceInfo    string
}

2.gorm引入

golang学习之gorm(一):Gorm介绍_golang gorm_浅弋、璃鱼的博客-CSDN博客

1)连接数据库db, err := gorm.Open(mysql.Open()  )

2)创建或者更新一张和指定strcut结构一样的表db.AutoMigrate(&models.UserBasic{})

3)增db.Create(user)

4)删db.Delete(&product, 1)

5)改db.Model(user).Update("PassWord", "1234")

6)查db.First(user, 1),查主键为1的user

/**
* @Auth:ShenZ
* @Description:
* @CreateDate:2022/06/15 10:57:44
 */
package main

import (
	"fmt"
	"ginchat/models"

	"gorm.io/driver/mysql"
	"gorm.io/gorm"
)

func main() {
	//gorm连接指定ip的数据库
	db, err := gorm.Open(mysql.Open("root:tx2311571602@tcp(127.0.0.1:3306)/ginchat?charset=utf8mb4&parseTime=True&loc=Local"), &gorm.Config{})
	if err != nil {
		panic("failed to connect database")
	}

	// 迁移 schema,用传入的模型格式更新一张表结构
	//db.AutoMigrate(&models.Community{})
	db.AutoMigrate(&models.UserBasic{})
	//db.AutoMigrate(&models.Message{})
	//db.AutoMigrate(&models.GroupBasic{})
	//db.AutoMigrate(&models.Contact{})

	// Create
	user := &models.UserBasic{}
	user.Name = "申专"

	db.Create(user)

	// // Read
	fmt.Println(db.First(user, 1)) // 根据整型主键查找第一条记录
	//db.First(user, "code = ?", "D42") // 查找 code 字段值为 D42 的记录

	// Update - 将 product 的 price 更新为 200
	db.Model(user).Update("PassWord", "1234")
	// Update - 更新多个字段
	//db.Model(&product).Updates(Product{Price: 200, Code: "F42"}) // 仅更新非零值字段
	//db.Model(&product).Updates(map[string]interface{}{"Price": 200, "Code": "F42"})

	// Delete - 删除 product
	//db.Delete(&product, 1)
}

3.gin引入

文档 | Gin Web Framework (gin-gonic.com)

创建一个gin服务,然后写处理请求函数,最后在接口上运行。

用法见gin框架_BigOrangeSama的博客-CSDN博客

视频教程里是把这一流程进行了分割:

把服务创建和处理请求单独放在router.app.go下,

其路由处理请求的处理函数是放在了service包下执行跳转一个GetIndex函数。

最后在主函数调用路由,在指定接口运行,以达到解耦的效果。

猜你喜欢

转载自blog.csdn.net/m0_50973548/article/details/132591914