前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【Golang 语言社区】 剧透社区APP 问答功能模块设计思路及实现

【Golang 语言社区】 剧透社区APP 问答功能模块设计思路及实现

作者头像
李海彬
发布2018-03-19 16:38:13
7690
发布2018-03-19 16:38:13
举报
文章被收录于专栏:Golang语言社区Golang语言社区

社区APP问答模块,设计思想:主要为了满足用户在发表疑问及遇到的问题的时候可以发表。 1 发表问答模块,需要保存数据库及内存数据库 2 获取问答列表,主要是读取内存数据库的数据。 3 问答列表及评论的分页模式;这个可以用pagenumber或者时间戳获取分页数据;这个如果大家想了解可以微信公众账号获取交流群里交流。 4 大家互相学习,我技术一般,有错误的请大家见谅哈。 发表问答及保存数据及内存数据库代码:

// 发表一个问答

func (this *OnlineUser) PlayerSendAnwerInfoFun(ProtocolData map[string]interface{}) {

Log_Eio.Log("Entry PlayerSendAnwerInfoFun")

Log_Eio.Fmt("Entry PlayerSendAnwerInfoFun")

// 获取客户端传递的数据

iAuthorRoleUID := ProtocolData["AuthorRoleUID"].(float64) // 用户的唯一的UID 信息

strAuthorName := ProtocolData["AuthorName"].(string) // 发表问答的人的名字

strAuthorIcon := ProtocolData["AuthorIcon"].(string) // 发表问答的人的ICON

strAnswerContent := ProtocolData["AnswerContent"].(string) // 发辫问答的内容

// 写数据的操作的数据信息

bret := dbif.PlayerAnswerDataSaveDBFun(int32(iAuthorRoleUID), strAuthorName, strAuthorIcon, strAnswerContent)

if bret == false {

Log_Eio.Log("Entry PlayerAnswerDataSaveDBFun Save Data Fail!!!")

Log_Eio.Fmt("Entry PlayerAnswerDataSaveDBFun Save Data Fail!!!")

// 需要传输的数据的结构

SendAnswerinfo := Proto2_Data.HS2C_SendAnswer{

Protocol: Proto_Data.Go_Of_Answer_Proto, // 主协议

Protocol2: Proto2_Data.HS2C_SendAnswer_Proto, // 子协议

IsSucc: false, // 发表失败

}

// 发送给玩家数据

this.PlayerSendMessage(SendAnswerinfo)

return

}

// 需要传输的数据的结构

SendAnswerinfo := Proto2_Data.HS2C_SendAnswer{

Protocol: Proto_Data.Go_Of_Answer_Proto, // 主协议

Protocol2: Proto2_Data.HS2C_SendAnswer_Proto, // 子协议

IsSucc: true, // 发表成功

}

// 发送给玩家数据

this.PlayerSendMessage(SendAnswerinfo)

return

}

----------------------------------------------------------------------------------------------------

数据保存数据:

// 发表问答社区,保存到数据库

func PlayerAnswerDataSaveDBFun(iAuthorRoleUID int32, strAuthorName string, strAuthorIcon string, strAnswerContent string) bool {

var strSql string

var tmpAnswerInfo Global_Define.StAnswerInfo

// MySQL数据库语句

strSql = "INSERT INTO t_AnswerInfo(AuthorRoleUID,AuthorName,AuthorIcon,AnswerContent,InsertTime)" +

"VALUES( ?, ?, ?, ?, ?)"

stmt, err := GSeverdb.Prepare(strSql)

if err != nil {

Log_Eio.Log(err.Error())

Log_Eio.Fmt("11111", err.Error())

return false

}

//时间戳到具体显示的转化

iLastLoginTime := time.Now().Unix()

// 数据库写入执行 ,插入数据的操作。

res, err := stmt.Exec(iAuthorRoleUID, strAuthorName, strAuthorIcon, strAnswerContent, iLastLoginTime)

if err != nil {

Log_Eio.Log(err.Error())

Log_Eio.Fmt("11111", err.Error())

return false

}

// 获取帖子的ID

strSqlS := "select AnswerId from t_AnswerInfo where AuthorName = '" + strAuthorName + "' AND InsertTime = '" + strconv.Itoa(int(iLastLoginTime)) + "'"

Log_Eio.Log(strSqlS)

Log_Eio.Fmt(strSqlS)

Rows, err1 := GSeverdb.Query(strSqlS)

if err != nil {

Log_Eio.Log(err1.Error())

Log_Eio.Fmt(err1.Error())

return false

}

var TMPstrId int

defer Rows.Close()

for Rows.Next() {

err11 := Rows.Scan(&TMPstrId)

if err11 != nil {

Log_Eio.Fmt(err11)

}

}

// 日志的打印数据更新

Log_Eio.Fmt(res)

// 整合数据

tmpAnswerInfo.AuthorRoleUID = strconv.Itoa(int(iAuthorRoleUID))

tmpAnswerInfo.AuthorName = strAuthorName

tmpAnswerInfo.AuthorIcon = strAuthorIcon

tmpAnswerInfo.AnswerContent = strAnswerContent

tmpAnswerInfo.Instertime = strconv.Itoa(int(iLastLoginTime))

tmpAnswerInfo.Answerid = strconv.Itoa(int(TMPstrId))

// 更新到内存数据库

Redis_DB.Redis_Write_AnswerInfoData(strconv.Itoa(int(iLastLoginTime)), tmpAnswerInfo)

return true

}

----------------------------------------------------------------------------------------------------

数据保存到内存数据库:

// 用户产生一条问答

// hkey : 为 问答产生的时间戳: Instertime

func Redis_Write_AnswerInfoData(strkey_Instertime string, stAnswerInfo Global_Define.StAnswerInfo) bool {

Log_Eio.Log("Entry Redis_Write_AnswerInfoData")

Log_Eio.Fmt("Entry Redis_Write_AnswerInfoData")

// 数据的存储

itimekey, _ := strconv.Atoi(stAnswerInfo.Instertime)

bytetmp, _ := json.Marshal(stAnswerInfo)

_, error := GRedis_Client.Zadd(AnswerInfoKey, float64(itimekey), bytetmp)

if error != nil {

Log_Eio.Fmt("GRedis_Client.Zadd: Set data ", error)

Log_Eio.Log("GRedis_Client.Zadd: Set data ", error.Error())

return false

}

return true

}

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2016-01-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Golang语言社区 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 MySQL
腾讯云数据库 MySQL(TencentDB for MySQL)为用户提供安全可靠,性能卓越、易于维护的企业级云数据库服务。其具备6大企业级特性,包括企业级定制内核、企业级高可用、企业级高可靠、企业级安全、企业级扩展以及企业级智能运维。通过使用腾讯云数据库 MySQL,可实现分钟级别的数据库部署、弹性扩展以及全自动化的运维管理,不仅经济实惠,而且稳定可靠,易于运维。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档