# chat_project **Repository Path**: meloncodezhang/chat_project ## Basic Information - **Project Name**: chat_project - **Description**: go语言实现高并发的聊天应用 - **Primary Language**: Go - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2024-01-30 - **Last Updated**: 2024-02-25 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # chat_project #### 介绍 go语言实现高并发的聊天应用 #### 软件架构 软件架构说明 #### 安装教程 1. xxxx 2. xxxx 3. xxxx #### 使用说明 1. xxxx 2. xxxx 3. xxxx #### 参与贡献 1. Fork 本仓库 2. 新建 Feat_xxx 分支 3. 提交代码 4. 新建 Pull Request #### 特技 1. 使用 Readme\_XXX.md 来支持不同的语言,例如 Readme\_en.md, Readme\_zh.md 2. Gitee 官方博客 [blog.gitee.com](https://blog.gitee.com) 3. 你可以 [https://gitee.com/explore](https://gitee.com/explore) 这个地址来了解 Gitee 上的优秀开源项目 4. [GVP](https://gitee.com/gvp) 全称是 Gitee 最有价值开源项目,是综合评定出的优秀开源项目 5. Gitee 官方提供的使用手册 [https://gitee.com/help](https://gitee.com/help) 6. Gitee 封面人物是一档用来展示 Gitee 会员风采的栏目 [https://gitee.com/gitee-stars/](https://gitee.com/gitee-stars/) #### 数据库相关 #数据库增删改查一般套路 #一、安装初始化 xorm.NewSession(driverName,dataSourceName) #二、定义实体 模型层model或者实体层entity ##1、定义与表结构对应对象User ```go type User struct { Id int64 `xorm:"pk autoincr bigint(64)" form:"id" json:"id"` Mobile string `xorm:"varchar(20)" form:"mobile" json:"mobile"` Passwd string `xorm:"varchar(40)" form:"passwd" json:"-"` // 什么角色 Avatar string `xorm:"varchar(150)" form:"avatar" json:"avatar"` Sex string `xorm:"varchar(2)" form:"sex" json:"sex"` // 什么角色 Nickname string `xorm:"varchar(20)" form:"nickname" json:"nickname"` // 什么角色 Salt string `xorm:"varchar(10)" form:"salt" json:"-"` // 什么角色 Online int `xorm:"int(10)" form:"online" json:"online"` //是否在线 Token string `xorm:"varchar(40)" form:"token" json:"token"` // 什么角色 Memo string `xorm:"varchar(140)" form:"memo" json:"memo"` // 什么角色 Createat time.Time `xorm:"datetime" form:"createat" json:"createat"` // 什么角色 } ``` #三、定义和业务相关的服务 服务层service,专门用来存放数据库业务服务的,如 注册、登录 ##2、查询单个用户Find,参数userId DbEngin.ID(userId).Get(&User) ##3、查询满足某一类条件的Search // result :=make([]User,0) DbEngin.where("mobile=? ",moile).Find(&result) DbEngin.where("mobile=? ",moile).Get(&User) ##4、创建一条记录Create DBengin.InsertOne(&User) ##5、修改某条记录Update DBengin.ID(userId).Update(&User) // update ... where id = xx DBengin.Where("a=? and b=?",a,b).Update(&User) DBengin.Where("a=? and b=?",a,b).Cols("nick_name").Update(&User) ##6、删除某条记录Delete DBengin.ID(userId).Delete(&User) ##7、MD5加密函数 ```cgo import ( "crypto/md5" "encoding/hex" "strings" ) func Md5Encode(data string) string{ h := md5.New() h.Write([]byte(data)) // 需要加密的字符串为 123456 cipherStr := h.Sum(nil) return hex.EncodeToString(cipherStr) } func MD5Encode(data string) string{ return strings.ToUpper(Md5Encode(data)) } func ValidatePasswd(plainpwd,salt,passwd string) bool{ return Md5Encode(plainpwd+salt)==passwd } func MakePasswd(plainpwd,salt string) string{ return Md5Encode(plainpwd+salt) } ``` #四、控制器层调用 ```go var userServer server.UserServer type UserCtrl struct{} func (ctrl *UserCtrl)Register(w){ user = userServer.Register(mobile,passwd) } ```