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


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

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

用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"`
}
<p>type Reply struct {
ID        int       <code>json:"id"</code>
Content   string    <code>json:"content"</code>
Username  string    <code>json:"username"</code>
MessageID int       <code>json:"message_id"</code>
CreatedAt time.Time <code>json:"created_at"</code>
}</p>

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

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/*")
<pre class='brush:php;toolbar:false;'>r.GET("/", getMessages)
r.POST("/message", createMessage)
r.POST("/reply", createReply)

r.Run(":8080")

}

3. 实现核心接口

获取所有留言(含回复)

NoCode NoCode

美团推出的零代码应用生成平台

NoCode 180 查看详情 NoCode
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"`
    }
<pre class='brush:php;toolbar:false;'>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"`
    }
<pre class='brush:php;toolbar:false;'>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:

<!DOCTYPE html>
<html>
<head><title>留言系统</title></head>
<body>
  <h2>发表留言</h2>
  <form method="post" action="/message">
    <input type="text" name="username" placeholder="用户名" required />
    <textarea name="content" placeholder="输入留言内容" required></textarea>
    <button type="submit">提交</button>
  </form>
<p><hr/>
<h2>所有留言</h2>
{{range .messages}}
<div style="border:1px solid #ccc; margin:10px; padding:10px;">
<p><strong>{{.Username}}</strong> ({{.CreatedAt.Format "2006-01-02 15:04"}})</p>
<p>{{.Content}}</p></p><pre class='brush:php;toolbar:false;'>  <!-- 回复表单 -->
  <form method="post" action="/reply" style="margin:10px 0;">
    <input type="hidden" name="message_id" value="{{.ID}}" />
    <input type="text" name="username" placeholder="用户名" required />
    <input type="text" name="content" placeholder="回复内容" required />
    <button type="submit">回复</button>
  </form>

  <!-- 显示回复 -->
  {{range .Replies}}
    <div style="margin-left:20px; font-size:0.9em; color:#555;">
      <strong>{{.Username}}</strong>: {{.Content}} 
      ({{.CreatedAt.Format "15:04"}})
    </div>
  {{end}}
</div>

{{end}}

以上就是如何用Golang开发简单的留言回复系统_Golang 留言回复系统实战的详细内容,更多请关注其它相关文章!


# js  # html  # golang  # github  # go  # json  # git  # 前端  # 爱站seo日志分析  # 搜狐网站推广方案设计怎么写  # 表单  # 解决问题  # 留言内容  # 中文网  # 相关文章  # 推荐使用  # 文件上传  # 如何用  # 数据结构  # gola  # gin框架  # 路由  # ai  # 后端  # app  # 建设标准查询网站  # 网站建设需求说明书  # 吉安技术营销推广  # 阜新网站收费推广  # 抚州seo什么价格  # 关键词排名流量软件  # 网络营销推广平台模式  # 工厂抖音企业号关键词排名 


相关栏目: 【 Google疑问12 】 【 Facebook疑问10 】 【 优化推广96088 】 【 技术知识133117 】 【 IDC资讯59369 】 【 网络运营7196 】 【 IT资讯61894 】


相关推荐: 《律学法考》查看学习数据方法  猫眼电影app如何设置电影上映提醒_猫眼电影上映提醒设置教程  CSS动画如何实现图标旋转并放大_transform rotate scale @keyframes实现  支付宝登录刷脸不是本人如何解决  Windows Audio服务启动失败怎么办_电脑没声音的终极服务修复法【修复】  手机自动关机是怎么回事?如何修复?手机异常关机的原因排查与修复技巧  电脑视频号|直播|如何分享屏幕  mysql怎么导入sql文件_mysql导入sql文件的方法与技巧  Win10如何查看已安装的更新补丁 Win10卸载指定更新教程【教程】  J*aScript类型数组_TypedArray使用  附近酒吧怎么找?  铁路12306官网入口 铁路12306中国铁路官网登录首页  Go语言反射机制:如何访问被嵌入结构体遮蔽的方法  mysql中外键约束如何使用_mysql FOREIGN KEY操作  微信网页版在线登录 微信网页版在线使用入口  Go语言反射机制下访问嵌入结构体中的被遮蔽方法  Sublime怎么格式化HTML代码_Sublime前端代码美化插件使用指南  《随手记》关闭首页消息推送方法  多多买菜门店端app订单查看方法  海棠阅读登录教程_详细讲解海棠登录操作  《环球网校》设置报考省市方法  Sublime怎么自动添加CSS前缀_Sublime安装Autoprefixer插件  米侠浏览器插件无法启用怎么办 米侠浏览器扩展兼容性修复  怎么恢复删除的电脑文件_数据恢复软件使用教程  J*aScript二进制处理_ArrayBuffer与Blob  《理想汽车》权限管理设置方法  哔哩哔哩黑名单怎么查看  《桃源记2》资源采集攻略  在PHP环境中正确加载HTML资源:CSS样式与图片路径指南  夸克浏览器资源嗅探怎么用 夸克浏览器网页资源下载技巧【教程】  J*aScript字符串_Unicode处理  在Django单元测试中优雅处理信号:基于环境的条件执行策略  漫蛙app官方版手机正版入口-漫蛙漫画manwa在线漫画正版入口  奥克斯空调不制热啥毛病_奥克斯空调不制热原因分析及解决技巧  word文档行距怎么调?word文档调行距的操作步骤  b站怎么查看视频的码率_b站视频码率查看方法  苹果手机怎么合并照片_苹果手机合并多张照片的操作方法  QQ网站入口直接登录 QQ官方正版登录页面  GBA模拟器手柄按键设置  铁路12306怎么申请退票_铁路12306退票申请操作流程  《爱笔思画x》魔棒工具抠图教程  qq邮箱格式填写示例 qq邮箱标准填写规范  基于 Flink 和 Kafka 实现高效流处理:连续查询与时间窗口  谷歌浏览器官方镜像获取方法_谷歌浏览器网页版入口极速直达  《蓝色星原:旅谣》坐骑获取攻略  b站怎么用微信登录_b站微信登录方法  Bootstrap 5导航栏折叠功能失效:数据属性迁移指南  J*aScript大数运算_BigInt使用指南  iPhone17Pro如何连接蓝牙耳机_iPhone17Pro蓝牙设备配对与连接方法介绍  4399造梦西游3无敌版_4399游戏入口 

 2025-11-24

了解您产品搜索量及市场趋势,制定营销计划

同行竞争及网站分析保障您的广告效果

点击免费数据支持

提交您的需求,1小时内享受我们的专业解答。

运城市盐湖区信雨科技有限公司


运城市盐湖区信雨科技有限公司

运城市盐湖区信雨科技有限公司是一家深耕海外推广领域十年的专业服务商,作为谷歌推广与Facebook广告全球合作伙伴,聚焦外贸企业出海痛点,以数字化营销为核心,提供一站式海外营销解决方案。公司凭借十年行业沉淀与平台官方资源加持,打破传统外贸获客壁垒,助力企业高效开拓全球市场,成为中小企业出海的可靠合作伙伴。

 8156699

 13765294890

 8156699@qq.com

Notice

We and selected third parties use cookies or similar technologies for technical purposes and, with your consent, for other purposes as specified in the cookie policy.
You can consent to the use of such technologies by closing this notice, by interacting with any link or button outside of this notice or by continuing to browse otherwise.