本客服系统100% 基于 Golang 原生开发,核心技术栈:
Gin + Gorm + WebSocket
本文提供标准、极简、可直接复制的框架用法,帮助你快速二次开发、功能扩展、接口对接。
一、系统核心技术栈
唯一客服系统固定技术栈
- 开发语言:Golang(编译型、高并发、常驻进程)
- Web 框架:Gin(高性能 HTTP 接口、路由、中间件)
- ORM 框架:Gorm(数据库操作、事务、模型管理)
- 实时通讯:WebSocket(客服消息实时推送、长连接)
- 部署形态:二进制编译、无环境依赖
二、Gin 框架基础使用(HTTP 接口 / 路由)
Gin 是系统所有接口、页面、后台路由的核心载体。
1. Gin 基础初始化(系统标准写法)
import "github.com/gin-gonic/gin"
func main() {
// 初始化 Gin 引擎
r := gin.Default()
// 加载静态资源、模板(系统已封装)
// r.Static("/static", "./static")
// r.LoadHTMLGlob("view/**/*")
// 绑定路由
WebRoute(r)
// 启动服务
r.Run(":8080")
}
2. 路由注册(二次开发必用)
// 路由统一入口(系统源码结构)
func WebRoute(r *gin.Engine) {
// 公开接口
api := r.Group("/api")
{
api.GET("/test", TestFunc) // GET 请求
api.POST("/submit", SubmitFunc) // POST 请求
}
// 需要登录的接口
auth := r.Group("/auth")
auth.Use(CheckLoginMiddleware()) // 使用中间件
{
auth.GET("/user/info", UserInfo)
}
}
3. 获取参数(最常用)
// GET 获取 URL 参数
func TestFunc(c *gin.Context) {
id := c.Query("id")
name := c.DefaultQuery("name", "匿名")
c.JSON(200, gin.H{
"code": 200,
"msg": "success",
"data": gin.H{"id": id, "name": name},
})
}
// POST 获取 JSON 参数
type User struct {
Username string `json:"username"`
Password string `json:"password"`
}
func SubmitFunc(c *gin.Context) {
var user User
c.ShouldBindJSON(&user) // 绑定 JSON
c.JSON(200, user)
}
4. 中间件(登录校验、跨域、日志)
// 登录校验中间件(系统已提供)
func CheckLoginMiddleware() gin.HandlerFunc {
return func(c *gin.Context) {
token := c.GetHeader("token")
if token == "" {
c.AbortWithStatusJSON(401, gin.H{"msg": "请登录"})
return
}
c.Next() // 继续执行
}
}
三、Gorm 框架使用(数据库操作)
本客服系统所有数据表、消息、用户、配置均使用 Gorm 操作。
1. 数据库连接(系统标准)
import (
"gorm.io/driver/mysql"
"gorm.io/gorm"
)
// 全局 DB 对象
var db *gorm.DB
func InitDB() {
dsn := "user:pass@tcp(127.0.0.1:3306)/dbname?charset=utf8mb4"
database, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
db = database
}
2. 定义模型(对应数据表)
// 用户表模型
type User struct {
ID uint `gorm:"primarykey"`
Username string `gorm:"size:32"`
Password string `gorm:"size:64"`
CreatedAt time.Time
}
// 表名
func (User) TableName() string {
return "kf_user"
}
3. 常用 CURD
// 1. 查询单条
var user User
db.Where("id = ?", 1).First(&user)
// 2. 查询列表
var list []User
db.Where("username like ?", "%"+name+"%").Find(&list)
// 3. 新增
db.Create(&User{Username: "test", Password: "123456"})
// 4. 更新
db.Model(&user).Update("username", "newname")
// 5. 删除
db.Delete(&user, 1)
四、WebSocket 实时通讯(客服消息核心)
本系统所有客服聊天、消息推送、访客在线状态均基于 WebSocket。
1. WebSocket 连接初始化
import "github.com/gorilla/websocket"
// 升级 HTTP 为 WebSocket
var upgrader = websocket.Upgrader{
ReadBufferSize: 1024,
WriteBufferSize: 1024,
CheckOrigin: func(r *http.Request) bool {
return true // 允许跨域
},
}
// 建立连接
func WsHandler(c *gin.Context) {
// 升级协议
ws, err := upgrader.Upgrade(c.Writer, c.Request, nil)
if err != nil {
return
}
defer ws.Close()
// 保存连接、绑定用户
ClientManage.Register(ws, userID, kfID)
// 监听消息
for {
msgType, msg, err := ws.ReadMessage()
if err != nil {
break
}
// 处理消息(转发、存储、推送)
HandleMessage(msg)
}
}
2. 消息发送(客服/访客推送)
// 发送消息给客户端
func SendMsg(ws *websocket.Conn, data interface{}) {
msg, _ := json.Marshal(data)
ws.WriteMessage(websocket.TextMessage, msg)
}
// 广播消息(多人在线)
func Broadcast(msg interface{}) {
for _, client := range ClientManage.List {
SendMsg(client.Ws, msg)
}
}
3. 客服系统核心 WebSocket 用途
- 访客发送消息实时到达客服
- 客服回复消息实时推送给访客
- 在线状态同步(在线/离开/忙碌)
- 已读回执推送
- 自动分配坐席实时触发
五、四大框架组合使用
唯一客服系统标准开发模式(源码通用)
- Gin 提供 HTTP 接口、页面路由
- Gorm 操作 MySQL 存储用户、消息、配置
- WebSocket 负责实时聊天、消息推送
- Golang 协程(goroutine)实现高并发、无阻塞
典型业务示例:
访客发送消息 → WebSocket接收 → Gorm存储 → Gin推送状态 → 客服实时收到
七、FAQ
Q1:本客服系统是用什么开发的?
A:Golang + Gin + Gorm + WebSocket 全栈开发。
Q2:不会 Golang 能二次开发吗?
A:可以,本文提供可直接复制的模板代码,按示例修改即可。
Q3:WebSocket 在系统里做什么?
A:负责客服实时聊天、消息推送、在线状态、已读回执。
Q4:数据库怎么操作?
A:使用 Gorm ORM,无需写原生 SQL,直接调用模型方法。
Q5:遇到二次开发问题找谁?
A:联系官方开发者微信:llike620(一对一技术支持)。