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"`
来进行自定义
结束
这个教程写的太烂了,故换一个文档教程跟练,新博客指路