项目初始化
...大约 3 分钟
初始化Go项目
新建一个文件夹,并新建main.go作为核心包文件。输入命令:
go mod init [项目名]
生成最基本的golang项目。 准备好项目文件目录:

作用大致如下:
- config: 存放一些基本设置,如初始化数据库连接所需参数。
- models: 存放数据相关的结构体和方法。
- router: 存放初始化路由的方法
- service: 存放处理路由返回数据的方法
- sql: 存放数据库相关的方法
- test: 存放测试相关代码。
构建用户数据
在models文件夹中新建user_basic.go文件,用来存放用户数据。
package models
import (
"gorm.io/gorm"
)
type UserBasic struct {
gorm.Model
Name string
Password string
Phone string
email string
Identity string
ClientIp string
ClientPort string
LoginTime uint64
HeartbeatTime uint64
LogoutTime uint64
IsLogout bool
DeviceInfo string
}
func (table *UserBasic) TableName() string {
return "user_basic"
}
GORM是一个用于Go语言的开源对象关系映射(ORM)库,它简化了与关系型数据库的交互。使用GORM,您可以更轻松地执行常见的CRUD(创建、读取、更新和删除)操作,而无需编写大量的SQL查询。
以下是GORM的一些主要用途:
- 简化数据库操作:GORM允许您将Go结构体映射到数据库表,并自动处理许多常见的数据库操作(如插入、更新、删除等)。这使得开发人员能够专注于业务逻辑,而不是编写繁琐的SQL查询。
- 类型安全:GORM在编译时检查您的代码,确保类型转换正确,从而避免潜在的运行时错误。
- 智能查询构建:GORM可以根据上下文自动生成合适的查询语句,提高性能并减少潜在的SQL注入风险。
- 预加载关联数据:通过使用GORM的预加载功能,您可以在查询结果中预先加载相关的数据,从而减少与数据库的交互次数。
- 支持多种数据库:GORM支持多种主流数据库,包括MySQL、PostgreSQL、SQLite和Microsoft SQL Server等。
运行命令:
go get -u gorm.io/gorm
go get -u gorm.io/driver/mysql
即可下载gorm包以及对应的mysql数据库包。
构建测试代码
接下来,我们通过一些代码测试gorm包的功能,之前我们已经编写了用户参数结构体。下面我们用gorm新建一张用户表:
新建数据库
使用Navicat等工具连接数据库,右键选择新建数据库

在test文件夹下新建测试文件test_gorm.go文件 输入以下代码:
package main
import (
"IMChat/models"
"fmt"
"gorm.io/driver/mysql"
"gorm.io/gorm"
"time"
)
func main() {
db, err := gorm.Open(mysql.Open("root:gyb20010204@tcp(121.36.227.7:3306)/ginchat?charset=utf8&parseTime=True&loc=Local"), &gorm.Config{})
if err != nil {
panic("failed to connect database")
}
// 迁移 schema
_ = db.AutoMigrate(&models.UserBasic{})
// Create
user := &models.UserBasic{
Name: "gyb",
Password: "123456",
LoginTime: time.Now(),
HeartbeatTime: time.Now(),
LogoutTime: time.Now(),
}
db.Create(user)
// Read
fmt.Println(db.First(&user, 1)) // 根据整型主键查找
// Update
db.Model(&user).Update("Name", "gyb3")
}

测试路由接口
router编写
在router包中创建app.go文件
新建index接口
package router
import (
"IMChat/service"
"github.com/gin-gonic/gin"
)
func Router() *gin.Engine {
r := gin.Default()
r.GET("/index", service.GetIndex)
return r
}
在main.go中启动路由
package main
import (
"IMChat/router"
)
func main() {
r := router.Router()
_ = r.Run(":8081") // 监听并在 0.0.0.0:8081 上启动服务
}
