跳至主要內容

项目初始化

Mr.Hope...大约 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的一些主要用途:

  1. 简化数据库操作:GORM允许您将Go结构体映射到数据库表,并自动处理许多常见的数据库操作(如插入、更新、删除等)。这使得开发人员能够专注于业务逻辑,而不是编写繁琐的SQL查询。
  2. 类型安全:GORM在编译时检查您的代码,确保类型转换正确,从而避免潜在的运行时错误。
  3. 智能查询构建:GORM可以根据上下文自动生成合适的查询语句,提高性能并减少潜在的SQL注入风险。
  4. 预加载关联数据:通过使用GORM的预加载功能,您可以在查询结果中预先加载相关的数据,从而减少与数据库的交互次数。
  5. 支持多种数据库: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等工具连接数据库,右键选择新建数据库

image-20240508144031272

在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")

}

image-20240508145437252

测试路由接口

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 上启动服务
}

访问http://localhost:8081/indexopen in new window

image-20240508145802761