基于 gin + websocket 即时通讯项目 (一、项目初始化)

news/2024/10/30 23:15:00/

基于 gin + websocket 即时通讯项目

1、安装环境与初始化

  • 搜索各种包官网

https://pkg.go.dev/

image-20231118154355946

1.1 安装 grom


go get -u gorm.io/grom

image-20231118150809109

1.2 安装 MySQL 驱动


go get -u gorm.io/driver/sqlite

go get -u gorm.io/driver/mysql

image-20231118154812322

1.3 安装 gin


go get -u github.com/gin-gonic/gin

image-20231118151601161

1.4 安装 viper


go get github.com/spf13/viper

image-20231118154236141

1.5 安装 gin


go get github.com/googollee/go-socket.io

image-20231117151053131

1.6 安装 swaggo


  • 安装

go get -u github.com/swaggo/swag/cmd/swag

go install github.com/swaggo/swag/cmd/swag@latest

go get -u github.com/swaggo/gin-swagger

go get -u github.com/swaggo/files

image-20231118170958972

  • 初始化

swag init

image-20231118171305741

  • 配置

  • app

    • router
      • router.go
package routerimport ("app/docs""app/service""github.com/gin-gonic/gin"swaggerfiles "github.com/swaggo/files"ginSwagger "github.com/swaggo/gin-swagger"
)func Router() *gin.Engine {r := gin.Default()r.GET("swagger/*any", ginSwagger.WrapHandler(swaggerfiles.Handler))docs.SwaggerInfo.BasePath = ""r.GET("/index", service.GetIndex)userGroup := r.Group("api/user")userGroup.GET("/getUserList", service.GetUserList)return r
}
  • app
    • service
      • user.go
package serviceimport ("app/dto""github.com/gin-gonic/gin"
)// @title 查询所有用户
// @version 1.0
// @Tags 用户
// @contact.name 通过用户手机号获取购物车信息
// @Success 200 {string} data
// @Router /api/user/getUserList [get]
// @host 127.0.0.1:9999
func GetUserList(ctx *gin.Context) {data := dto.GetUserList()ctx.JSON(200, gin.H{"data": data})
}

注意: 注解之后需要重新初始化 然后重启项目

swag init

在这在这里插入图片描述
里插入图片描述

  • 访问

http://127.0.0.1:8888/swagger/index.html

image-20231118172734822

1.7 数据库初始化


  • app
    • config
      • application.yml

数据库配置文件:

server:port: 8888mysql:diverName: mysqlhost: 127.0.0.1port: 3306database: chatappusername: rootpassword: 123456charset: utf8mb4
  • app
    • utils
      • system_init.go

数据库 MySQL 初始化文件:

package utilsimport ("fmt""github.com/spf13/viper""gorm.io/driver/mysql""gorm.io/gorm""gorm.io/gorm/logger""log""os""time"
)var DB *gorm.DBfunc InitDB() *gorm.DB {viper.SetConfigName("application")	// 你的数据库配置 yml 文件名viper.AddConfigPath("config")		// yml 的文件路径err := viper.ReadInConfig()if err != nil {fmt.Println(err)}host := viper.GetString("mysql.host")port := viper.GetString("mysql.port")database := viper.GetString("mysql.database")username := viper.GetString("mysql.username")password := viper.GetString("mysql.password")charset := viper.GetString("mysql.charset")// 自定义 log 日志newLogger := logger.New(log.New(os.Stdout, "\r\n", log.LstdFlags),logger.Config{SlowThreshold: time.Second,LogLevel:      logger.Info,Colorful:      true,})db, err := gorm.Open(mysql.Open(username+`:`+password+`@tcp(`+host+`:`+port+`)/`+database+`?charset=`+charset+`&parseTime=true&loc=Local`),&gorm.Config{Logger: newLogger})if err != nil {panic("failed to connect database, err: " + err.Error())}//db.AutoMigrate(&models.UserBasic{})		// 迁移数据DB = dbreturn db
}func GetDB() *gorm.DB {return DB
}
  • app
    • models
      • userBasic.go
package modelsimport ("gorm.io/gorm""time"
)type UserBasic struct {gorm.ModelName          stringPassword      stringPhone         stringEmail         stringIdentity      uint64    // 唯一标识ClientIp      string    // 设备ClientPort    string    // 端口LoginTime     time.Time // 登录时间HeartBeatTime time.Time // 心跳LoginOutTime  time.Time // 登出时间IsLoginOut    bool      // 是否下线DeviceInfo    string    //设备信息
}func (table *UserBasic) TableName() string {return "user_basic"
}
  • app
    • main.go
package mainimport ("app/utils"
)func main() {utils.InitDB()err := r.Run(":8888")if err != nil {return}
}

1.8 测试


  • app
    • router
      • router.go
package routerimport ("app/service""github.com/gin-gonic/gin"
)func Router() *gin.Engine {r := gin.Default()r.GET("/index", service.GetIndex)userGroup := r.Group("api/user") 	// 路由组userGroup.GET("/getUserList", service.GetUserList)return r
}
  • app
    • dto
      • user.go
package dtoimport ("app/models""app/utils"
)func GetUserList() []*models.UserBasic {data := make([]*models.UserBasic, 10)utils.GetDB().Debug().Find(&data)		// 查询所有用户return data
}
  • app
    • service
      • user.go
package serviceimport ("app/dto""github.com/gin-gonic/gin"
)func GetUserList(ctx *gin.Context) {data := dto.GetUserList()				// 调用 dto 层方法获取数据ctx.JSON(200, gin.H{"data": data})		// 返回数据
}

http://www.ppmy.cn/news/1228980.html

相关文章

mac环境使用sudo进行node包管理

先介绍下需要安装的文件Node版本管理工具n,可直接安装。 1: 查看node版本 node --version2: 清除node缓存 sudo npm cache clean -f3: 全局安装node版本管理工具n sudo npm install n -g4: 使用版本管理工具安装指定node版本或者升级到最新node版本 sudo n stab…

解决 Python requests 库中 SSL 错误转换为 Timeouts 问题

解决 Python requests 库中 SSL 错误转换为 Timeouts 问题:理解和处理 SSL 错误的关键 在使用Python的requests库进行HTTPS请求时,可能会遇到SSL错误,这些错误包括但不限于证书不匹配、SSL层出现问题等。如果在requests库中设置verifyFalse&…

计数排序.

一.定义: 计数排序(Counting Sort)是一种非比较性质的排序算法,其时间复杂度为O(nk)(其中n为待排序的元素个数,k为不同值的个数)。这意味着在数据值范围不大并且离散分布的情况下,规…

Es 拼音搜索无法高亮

目录 背景: Es 版本: 第一步 第二步 (错误步骤 - 只是记录过程) 第三步 第四步 第五步 第六步 第七步 背景: app 原有的搜索功能无法进行拼音搜索,产品希望可以支持,例如内容中含有&a…

通过1688APP分享商品链接淘口令获取商品详情接口,淘口令返利接口,1688淘口令API接口,淘口令解析接口演示案例

1688淘宝拍立淘API接口在电商平台和购物应用中具有重要的作用。它可以帮助用户了解商品信息、做出购买决策,同时也支持商家进行竞品分析、市场研究和推广营销,以提升用户体验和促进销售增长。 1688.item_password 1、公共参数 名称类型必须描述keyStri…

【cpolar】搭建我的世界Java版服务器,公网远程联机

🎥 个人主页:深鱼~🔥收录专栏:cpolar🌄欢迎 👍点赞✍评论⭐收藏 目录 前言: 1. 搭建我的世界服务器 1.1 服务器安装java环境 1.2 配置服务端 2. 测试局域网联机 3. 公网远程联机 3.1 安…

解决在pycharm中使用matplotlib画图问题

第一,再导入包后直接绘图出现: AttributeError: module backend_interagg has no attribute FigureCanvas表明版本不兼容,我们需要加入:matplotlib.use(‘TkAgg’) 导入函数就变成了: import matplotlib matplotlib.…

nginx的GeoIP模块

使用场景 过滤指定地区/国家的IP,一般是国外IP禁止请求。 使用geoip模块实现不同国家的请求被转发到不同国家的nginx服务器,也就是根据国家负载均衡。 前置知识 GeoIP是什么? 官网地址 https://www.maxmind.com/en/home包含IP地址的地理位…