全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

如何用Golang开发简单的留言回复系统_Golang 留言回复系统实战

答案:使用Golang和Gin框架可快速实现留言回复系统,通过Message和Reply结构体定义数据模型,内存存储模拟数据库,设计提交留言、查看留言和添加回复的路由接口,结合HTML模板渲染前端页面,支持留言按时间倒序展示与嵌套回复功能。

用Golang开发一个简单的留言回复系统并不复杂,关键在于理清数据结构、路由设计和前后端交互方式。下面通过一个实战示例,带你一步步实现一个基础但功能完整的留言回复系统。

1. 功能需求与数据结构设计

我们要实现的基本功能包括:

  • 用户提交留言
  • 查看所有留言(按时间倒序)
  • 对某条留言进行回复
  • 支持层级嵌套显示(留言+回复)

定义核心结构体:

type Message struct {
    ID        int       `json:"id"`
    Content   string    `json:"content"`
    Username  string    `json:"username"`
    CreatedAt time.Time `json:"created_at"`
    Replies   []Reply   `json:"replies"`
}

type Reply struct { ID int json:"id" Content string json:"content" Username string json:"username" MessageID int json:"message_id" CreatedAt time.Time json:"created_at" }

使用内存存储模拟数据库,适合快速验证逻辑:

var messages = make(map[int]Message)
var replies = make(map[int][]Reply)
var messageIDCounter = 1
var replyIDCounter = 1

2. 使用Gin搭建HTTP服务

推荐使用 Gin 框架,轻量且性能高。先安装依赖:

go get -u github.com/gin-gonic/gin

初始化路由和服务器:

func main() {
    r := gin.Default()
    r.LoadHTMLGlob("templates/*")
r.GET("/", getMessages)
r.POST("/message", createMessage)
r.POST("/reply", createReply)

r.Run(":8080")

}

3. 实现核心接口

获取所有留言(含回复)

func getMessages(c *gin.Context) {
    var result []Message
    for _, msg := range messages {
        msg.Replies = replies[msg.ID]
        result = append(result, msg)
    }
    // 按时间倒序
    sort.Slice(result, func(i, j int) bool {
        return result[i].CreatedAt.After(result[j].CreatedAt)
    })
    c.HTML(200, "index.html", gin.H{"messages": result})
}

创建新留言

func createMessage(c *gin.Context) {
    var form struct {
        Username string `form:"username" binding:"required"`
        Content  string `form:"content" binding:"required"`
    }
if err := c.ShouldBind(&form); err != nil {
    c.JSON(400, gin.H{"error": err.Error()})
    return
}

msg := Message{
    ID:        messageIDCounter,
    Username:  form.Username,
    Content:   form.Content,
    CreatedAt: time.Now(),
}
messages[messageIDCounter] = msg
messageIDCounter++

c.Redirect(302, "/")

}

添加回复

func createReply(c *gin.Context) {
    var form struct {
        MessageID int    `form:"message_id" binding:"required"`
        Username  string `form:"username" binding:"required"`
        Content   string `form:"content" binding:"required"`
    }
if err := c.ShouldBind(&form); err != nil {
    c.JSON(400, gin.H{"error": err.Error()})
    return
}

reply := Reply{
    ID:        replyIDCounter,
    MessageID: form.MessageID,
    Username:  form.Username,
    Content:   form.Content,
    CreatedAt: time.Now(),
}

replies[form.MessageID] = append(replies[form.MessageID], reply)
replyIDCounter++

c.Redirect(302, "/")

}

4. 编写前端页面(HTML模板)

在项目根目录创建 templates/index.html



留言系统

  

发表留言


所有留言

{{range .messages}}

{{.Username}} ({{.CreatedAt.Format "2006-01-02 15:04"}})

{{.Content}}

  zuojiankuohaophpcn!-- 回复表单 --youjiankuohaophpcn
  zuojiankuohaophpcnform method="post" action="/reply" style="margin:10px 0;"youjiankuohaophpcn
    zuojiankuohaophpcninput type="hidden" name="message_id" value="{{.ID}}" /youjiankuohaophpcn
    zuojiankuohaophpcninput type="text" name="username" placeholder="用户名" required /youjiankuohaophpcn
    zuojiankuohaophpcninput type="text" name="content" placeholder="回复内容" required /youjiankuohaophpcn
    zuojiankuohaophpcnbutton type="submit"youjiankuohaophpcn回复zuojiankuohaophpcn/buttonyoujiankuohaophpcn
  zuojiankuohaophpcn/formyoujiankuohaophpcn

  zuojiankuohaophpcn!-- 显示回复 --youjiankuohaophpcn
  {{range .Replies}}
    zuojiankuohaophpcndiv style="margin-left:20px; font-size:0.9em; color:#555;"youjiankuohaophpcn
      zuojiankuohaophpcnstrongyoujiankuohaophpcn{{.Username}}zuojiankuohaophpcn/strongyoujiankuohaophpcn: {{.Content}} 
      ({{.CreatedAt.Format "15:04"}})
    zuojiankuohaophpcn/divyoujiankuohaophpcn
  {{end}}
zuojiankuohaophpcn/divyoujiankuohaophpcn

{{end}}


# html  # js  # 前端  # git  # json  # go  # github  # golang  # app  # 后端  # ai  # 路由  # gin框架  # gin  # 结构体  # 数据结构  # 接口  # sqlite  # postgresql  # 数据库  # http  # 推荐使用  # 留言内容  # 表单  # 带你  # 关键在于  # 发表留言  # 先安装 


相关文章: 西安专业网站制作公司有哪些,陕西省建行官方网站?  网站网页制作电话怎么打,怎样安装和使用钉钉软件免费打电话?  企业宣传片制作网站有哪些,传媒公司怎么找企业宣传片项目?  如何在阿里云购买域名并搭建网站?  如何用花生壳三步快速搭建专属网站?  建站DNS解析失败?如何正确配置域名服务器?  威客平台建站流程解析:高效搭建教程与设计优化方案  赚钱网站制作软件,建一个网站怎样才能赚钱?是如何盈利的?  营销式网站制作方案,销售哪个网站招聘效果最好?  建站VPS配置与SEO优化指南:关键词排名提升策略  制作农业网站的软件,比较好的农业网站推荐一下?  如何制作算命网站,怎么注册算命网站?  如何用y主机助手快速搭建网站?  建站之星安装后如何配置SEO及设计样式?  如何通过商城自助建站源码实现零基础高效建站?  为什么Go需要go mod文件_Go go mod文件作用说明  网站制作公司排行榜,抖音怎样做个人官方网站  制作网站的软件免费下载,免费制作app哪个平台好?  做企业网站制作流程,企业网站制作基本流程有哪些?  较简单的网站制作软件有哪些,手机版网页制作用什么软件?  如何在Golang中使用encoding/gob序列化对象_存储和传输数据  如何快速使用云服务器搭建个人网站?  如何快速上传建站程序避免常见错误?  广州网站建站公司选择指南:建站流程与SEO优化关键词解析  制作宣传网站的软件,小红书可以宣传网站吗?  如何用手机制作网站和网页,手机移动端的网站能制作成中英双语的吗?  招商网站制作流程,网站招商广告语?  广德云建站网站建设方案与建站流程优化指南  如何高效生成建站之星成品网站源码?  网站规划与制作是什么,电子商务网站系统规划的内容及步骤是什么?  建站之星导航配置指南:自助建站与SEO优化全解析  大连企业网站制作公司,大连2025企业社保缴费网上缴费流程?  如何生成腾讯云建站专用兑换码?  c# await 一个已经完成的Task会发生什么  linux top下的 minerd 木马清除方法  如何批量查询域名的建站时间记录?  建站之星官网登录失败?如何快速解决?  如何通过FTP服务器快速搭建网站?  宿州网站制作公司兴策,安徽省低保查询网站?  网站制作模板下载什么软件,ppt模板免费下载网站?  如何续费美橙建站之星域名及服务?  如何快速搭建自助建站会员专属系统?  c# 在高并发场景下,委托和接口调用的性能对比  如何用狗爹虚拟主机快速搭建网站?  大连网站制作费用,大连新青年网站,五年四班里的视频怎样下载啊?  大学网站设计制作软件有哪些,如何将网站制作成自己app?  微网站制作教程,我微信里的网站怎么才能复制到浏览器里?  如何快速搭建高效香港服务器网站?  ,购物网站怎么盈利呢?  用v-html解决Vue.js渲染中html标签不被解析的问题 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。