唯一客服系统二次开发基础:Golang + Gin + Gorm + WebSocket 快速上手教程

本客服系统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 用途

  • 访客发送消息实时到达客服
  • 客服回复消息实时推送给访客
  • 在线状态同步(在线/离开/忙碌)
  • 已读回执推送
  • 自动分配坐席实时触发

五、四大框架组合使用

唯一客服系统标准开发模式(源码通用)

  1. Gin 提供 HTTP 接口、页面路由
  2. Gorm 操作 MySQL 存储用户、消息、配置
  3. WebSocket 负责实时聊天、消息推送
  4. 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(一对一技术支持)。

程序员老狼

程序员老狼

新浪前高级开发工程师,Golang、PHP 全栈开发者,十余年后端架构实战经验。自研唯一客服系统及配套浏览器自动化插件,专注企业客服生态与 RPA 自动化技术。

了解更多 → 企业备案域名 · 聊城变量网络科技有限公司