基于 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.mzph.cn/news/149067.shtml

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

相关文章

中小企业怎么实现数字化转型?有什么实用的工单管理系统?

当前,世界经济数字化转型已是大势所趋。在这个数字化转型的大潮中,如果企业仍然逆水而行,不随大流,那么,企业将有可能会被抛弃,被对手超越,甚至被市场边缘化,导致最终的结果是&#…

C //例 8.22 用函数求整数a和b中的大者。

C程序设计 &#xff08;第四版&#xff09; 谭浩强 例 8.22 例 8.22 用函数求整数a和b中的大者。 IDE工具&#xff1a;VS2010 Note: 使用不同的IDE工具可能有部分差异。 代码块 方法&#xff1a;使用指针、函数指针、动态分配内存 #include <stdio.h> #include <…

亚马逊云科技帮助客户在云中构建具有高可靠性和韧性的应用程序

在一个理想的世界里&#xff0c;一切都非常完美&#xff0c;并且一直都在顺畅运作。早晨的通勤没有交通堵塞&#xff0c;最喜欢的停车位一直空着&#xff0c;一杯温度适宜的饮料&#xff0c;生活一帆风顺&#xff0c;没有任何中断。在需要时&#xff0c;您能得到所需的东西。但…

webview页面使用有哪些要求

使用WebView页面有以下要求&#xff1a; 确认是否需要用户授权&#xff1a;如果WebView要访问设备上的敏感信息或执行危险操作&#xff0c;应该给用户一个明确的授权提示&#xff0c;让用户知道WebView正在执行的操作。 确认WebView的配置&#xff1a;使用WebView时&#xff0…

【项目】云备份系统基础功能实现

目录 一.项目介绍1.云备份认识2.服务端程序负责功能与功能模块划分3.客户端程序负责功能与功能模块划分4.开发环境 二.环境搭建1.gcc升级7.3版本2.安装jsoncpp库3.下载bundle数据压缩库4.下载httplib库 三.第三方库认识1.json(1)json认识(2)jsoncpp认识(3)json实现序列化(4)jso…

医疗项目的需求分析以及开发流程

一.项目的背景以及需求 1.项目背景 1.政策层面来看&#xff0c;近年来我国政府相关部门陆续颁发了支持数字医疗行业发展的相关政策&#xff0c;“互联网医疗”政策逐渐明确完善&#xff0c;为数字医疗行业发展提供支持&#xff0c;行业迎来政策福利期。 其次&#xff0c;从经济…

2021年3月青少年软件编程(Python)等级考试试卷(一级)

2021年3月青少年软件编程&#xff08;Python&#xff09;等级考试试卷&#xff08;一级&#xff09; 分数&#xff1a;100.00 题数&#xff1a;37一、单选题&#xff08;共25题&#xff0c;每题2分&#xff0c;共50分&#xff09;二、判断题&#xff08;共10题&#xff0c;每题…

计算机毕业设计选题推荐-高校后勤报修微信小程序/安卓APP-项目实战

✨作者主页&#xff1a;IT研究室✨ 个人简介&#xff1a;曾从事计算机专业培训教学&#xff0c;擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Python…

实时人眼追踪、内置3D引擎,联想ThinkVision裸眼3D显示器创新四大应用场景

11月17日&#xff0c;在以“因思而变 智领未来”为主题的Think Centre和ThinkVision 20周年纪念活动上&#xff0c;联想正式发布了业内首款2D/3D 可切换裸眼3D显示器——联想ThinkVision 27 3D。该产品首次将裸眼2D、3D可切换技术应用在显示器领域&#xff0c;并拓展了3D技术多…

IPKISS Tutorials 1------导入 pdk

IPKISS Tutorials 1------导入 pdk 方法1方法2今天给大家介绍一下如何在 IPKISS 中导入想要使用的 pdk 文件。 方法1 # 导入IPKISS 自带 si_fab PDK from si_fab import all as pdk # 导入amf PDK from amfsip import all as pdk方法2 # 导入IPKISS 自带 si_fab PDK import …

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

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

2023年09月青少年软件编程(C语言)等级考试试卷(四级)

青少年软件编程&#xff08;C语言&#xff09;等级考试试卷&#xff08;四级&#xff09; 酒鬼 Santo刚刚与房东打赌赢得了一间在New Clondike 的大客厅。今天&#xff0c;他来到这个大客厅欣赏他的奖品。房东摆出了一行瓶子在酒吧上。瓶子里都装有不同体积的酒。令Santo高兴…

人工智能:科技的魔术师

引言&#xff1a; 人工智能&#xff08;Artificial Intelligence&#xff0c;简称AI&#xff09;作为一项前沿技术&#xff0c;正以惊人的速度改变着我们的生活。它像魔术师一样&#xff0c;能够解决我们的问题、提供建议&#xff0c;甚至预测未来。从智能手机到智能家居&…

): error C2039: “swish_param“: 不是 “caffe::LayerParameter“ 的成员

): error C2039: "swish_param": 不是 "caffe::LayerParameter" 的成员 版本错乱&#xff0c;没有这个文件了

oracle数据库中job和dbms_job比较

oracle中job和dbms_job比较 一、概述 Oralce中的任务有2种&#xff1a;Job和Dbms_job&#xff0c;两者的区别有&#xff1a; ①、Job是通过调用dbms_scheduler.create_job包创建的&#xff0c;Dbms_job则是通过调用dbms_job.submit包创建的。 ②、两种任务的查询视图都分为db…

2023年中国位置服务(LBS)产业链及市场规模分析[图]

卫星导航系统的高技术、高成本、高效益属性使其成为国家经济实力与科技实力的标志之一。卫星导航系统由空间段、地面段和用户段三个部分组成&#xff0c;已广泛用于交通运输、农林牧渔、航空航海等领域&#xff0c;服务载体包括手机、汽车、无人机、导弹等&#xff0c;对人们生…

nginx学习(3)Nginx 负载均衡

Nginx 负载均衡 实战案例 实现效果 浏览器地址栏输入地址 http://172.31.0.99/oa/a.html&#xff0c;负载均衡效果&#xff0c;平均在 8083 和 8084 端口中&#xff0c;刷新浏览器&#xff0c;显示不同 一、配置 1、先创建2个文件夹tomcat8083和tomcat8084&#xff0c;并将…

微信浏览器自动播放音频(兼容Android和iOS)

由于各大浏览器更新之后不再支持自动播放音频了,微信浏览器也同样如此,本人做项目有个页面需要使用到浏览器自动播放,这里需要用到微信浏览器,本人使用以下方式实现了微信浏览器在android和ios的自动播放功能 <!DOCTYPE html> <html lang"en"><head&g…

ChatGpt3.5已经应用了一段时间,分享一些自己的使用心得.

首先ChatGpt3.5的文本生成功能十分强大&#xff0c;但是chatgpt有一些使用规范大家需要注意&#xff0c;既然chat是一种工具&#xff0c;我们就需要学会它的使用说明&#xff0c;学会chatgpt的引用语句&#xff0c;会极大的方便我们的使用。我们需要做以下的准备。 明确任务和目…

挖掘PostgreSQL事务的“中间态”----更加严谨的数据一致性?

1.问题 今天在上班途中&#xff0c;中心的妹纸突然找我&#xff0c;非常温柔的找我帮忙看个数据库的报错。当然以我的性格&#xff0c;妹子找我的事情对我来说优先级肯定是最高的&#xff0c;所以立马放下手中的“小事”&#xff0c;转身向妹子走去。具体是一个什么样的问题呢…