Golang IM架构聊天开发

Golang IM架构聊天开发

项目架构及网络结构消息流程 

项目架构

网络结构

消息发送流程

Gin项目初始化及GORM引入

GORM基本概念和用法:GORM基本用法 - Gold_stein - 博客园

遇到的问题

测试时打开数据库失败,

使用的语句

db, err := gorm.Open(mysql.Open("root:mysql123456@tcp(127.0.0.1:3306)/ginchat?charset=utf8mb4&parseTime=True&loc=Local)"), &gorm.Config{})

遇到的报错

[error] failed to initialize database, got error unknown time zone Local)
panic: unknown time zone Local)

在执行下列所有操作之前,因为windows下mysql不自带timezone信息,需要先导入

MySQL :: MySQL 8.4 Reference Manual :: 7.1.15 MySQL Server Time Zone Support

mysql -u root -p mysql < file_name

直接用绝对路径导入会遇到error code2 或者 22,先cd到.sql文件的目录下,然后用管理员身份启动cmd,最终导入成功

 

时区使用Local会报错,换成UTC后才能正常运行

不过用UTC能正常运行,也可以说明其他地方没问题;

接下来,把mysql的默认时区改成了shanghai

SET GLOBAL time_zone = 'Asia/Shanghai';

并且写入了配置文件

[mysqld]
default-time-zone = 'Asia/Shanghai'

最终确认问题是/字符的解析问题引起的

dsn := "root:mysql123456@tcp(127.0.0.1:3306)/ginchat?charset=utf8mb4&parseTime=True&loc=Asia%2FShanghai"

将时区当中的/字符更改为URL编码%2F之后,就能够正常解析了;

而且在mysql中设置好默认时区之后,loc=Local也能够解析成功了

Gin引入及项目目录创建

Go当也可以实现Python当中import as那样的效果,例如:

import new_name "xxx/original_name"

GORM及Gin复盘整理

type UserBasic struct {
	gorm.Model
	Name          string
	Password      string
	Phone         string
	Email         string
	Identity      string `gorm:"unique"`
	ClientIP      string
	LoginTime     uint64
	HeartBeatTime uint64
	LogoutTime    uint64
	IsOffline     bool
	DeviceInfo    string
}

如上所示,我们可以在单引号包围的内容当中自定义gorm内容翻译到Mysql之后的行为;比如,LoginTime这个字段,在Mysql自动生成的列名是login_time,我们可以在后面加上`gorm:"column:xxx"`来进行自定义

结束

这个教程写的太烂了,故换一个文档教程跟练,新博客指路

基于Gin的IM聊天架构——HiChat - Gold_stein - 博客园

posted @ 2024-10-13 16:21  Gold_stein  阅读(17)  评论(0编辑  收藏  举报