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

基于 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.hqwc.cn/news/191331.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

​软考-高级-系统架构设计师教程(清华第2版)【第12章 信息系统架构设计理论与实践(P420~465)-思维导图】​

软考-高级-系统架构设计师教程(清华第2版)【第12章 信息系统架构设计理论与实践(P420~465)-思维导图】 课本里章节里所有蓝色字体的思维导图

代码随想录算法训练营第三十九天【动态规划part02】 | 62.不同路径、63. 不同路径 II

62.不同路径 题目链接: 力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台 求解思路: 动规五部曲 确定dp数组及其下标含义:dp[i][j] 表示从(0,0)出发,到(i,j&#x…

课程设计(毕业设计)—基于机器学习(CNN+opencv+python)的车牌识别—(可远程调试)计算机专业课程设计(毕业设计)

基于机器学习(CNNopencvpython)的车牌识别 下载本文机器学习(CNNopencvpython)的车牌识别系统完整的代码和参考报告链接(或者可以联系博主koukou(壹壹23七2五六98),获取源码和报告)https://download.csdn.net/download/shooter7/88548767此处…

腾讯云服务器租用价格,腾讯云服务器价格流量怎么算?

首先,让我们来看看腾讯云服务器租用价格。根据您的需求不同,腾讯云提供了多种不同的配置选项,从轻量级应用服务器到高性能的GPU服务器,都可以满足您的需求。以下是一些常见的腾讯云服务器租用价格: 一、腾讯云服务器租…

代码随想录 Day49 单调栈01 LeetCode LeetCodeT739每日温度 T496 下一个最大元素I

前言 折磨的死去活来的动态规划终于结束啦,今天秋秋给大家带来两题非常经典的单调栈问题,可能你不清楚单调栈是什么,可以用来解决什么问题,今天我们就来一步一步的逐渐了解单调栈,到能够灵活使用单调栈.注意以下讲解中,顺序的描述为 从栈头到栈底的顺序 什么时候用单…

解决:虚拟机远程连接失败

问题 使用FinalShell远程连接虚拟机的时候连接不上 发现 虚拟机用的VMware,Linux发行版是CentOs 7,发现在虚拟机中使用ping www.baidu.com是成功的,但是使用FinalShell远程连接不上虚拟机,本地网络也ping不通虚拟机&#xff0c…

STM32 HAL库函数HAL_SPI_Receive_IT和HAL_SPI_Receive的区别

背景 前段时间开发一个按键板驱动,该板用的STM32F103系列单片机,前任工程师用STM32CubeMX生成的工程,里面全是HAL库调用,我接手后,学习了下HAL库的用法,踩坑不少,特别是带IT后缀的函数&#xf…

Typecho用宝塔面板建站(保姆级教程)

提前准备: 1 已备案域名 注意:在腾讯云备案的域名部署阿里云服务器的话还需要在阿里云备案,反之亦然 2 服务器 服务器操作系统设置为windows 服务器实例设置:依次开放8888/888/443/3000-4000/21/22端口 个人用的阿里云,到安全组配…

带您识别RJ45网口连接器/网口插座口的LED灯的平脚/斜脚,带弹/不带弹细节区分

Hqst华强盛(盈盛电子)导读:网口连接器,网口插座,也叫网口母座,因为产品规格众多,常常因为细小差别,耽误工程设计级或者生产排期延误,今天就带大家一起来认识下平脚RJ45网口连接器/网口插座与斜脚…

51.Sentinel微服务保护

目录 (1)初识Sentinel。 (1.1)雪崩问题及解决方案。 (1.1.1)雪崩问题。 (1.1.2)解决雪崩问题的四种方式。 (1.1.3)总结。 (1.2)…

Git 简介及使用

前言 假设有这样一个场景,老板让员工做一个档案,员工这个档案做好了之后交给老板看,此时老板不满意,又让回去改,改完给老板看,但是老板又不是很满意,就这样改了又改,给老板看过之后&…

智慧工地APP全套源码,智慧工地云平台

智慧工地平台 ,智慧工地源码,智慧工地APP全套源码 智慧工地以施工现场风险预知和联动预控为目标,将智能AI、传感技术、人像识别、监控、虚拟现实、物联网、5G、大数据、互联网等新一代科技信息技术植入到建筑、机械、人员穿戴设施、场地进出关…