全网整合营销服务商

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

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

如何在Golang中构建留言板系统_用户提交留言并展示

Go基础留言板系统使用标准库实现:定义Message结构体与内存切片存储,HTML模板渲染表单及留言列表,HTTP路由处理GET展示与POST提交,提交后重定向防重复,支持XSS防护。

用 Go 构建一个基础留言板系统,核心是处理 HTTP 请求(接收表单提交)、存储数据(内存或文件暂存)、再渲染页面展示所有留言。下面以 纯标准库 + HTML 模板 实现一个可运行的最小可行版本,不依赖数据库或框架,适合初学理解流程。

1. 定义留言数据结构与存储

先定义留言结构体,并用切片在内存中暂存(开发调试够用,生产环境应换为 SQLite/PostgreSQL):

(放在 main.go 开头)

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

var messages = make([]Message, 0)
var nextID = 1

2. 编写 HTML 模板(含表单 + 留言列表)

新建 index.html 文件,放在项目根目录:



留言板

  

留下你的想法




大家的留言

{{range .}} {{.Username}} {{.CreatedAt.Format "2006-01-02 15:04"}}
{{.Content | html}} {{else}}

暂无留言

{{end}}

3. 实现 HTTP 路由与处理器

在 main.go 中注册两个路由:/(GET,显示页面)和 /submit(POST,接收并保存留言):

func main() {
    // 加载模板
    tmpl := template.Must(template.ParseFiles("index.html"))

    http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
        if r.Method != "GET" {
            http.Error(w, "Method not allowed", http.StatusMethodNotAllowed)
            return
        }
        // 渲染模板,传入所有留言
        tmpl.Execute(w, messages)
    })

    http.HandleFunc("/submit", func(w http.ResponseWriter, r *http.Request) {
        if r.Method != "POST" {
            http.Error(w, "Method not allowed", http.StatusMethodNotAllowed)
            return
        }

        // 解析表单
        err := r.ParseForm()
        if err != nil {
            http.Error(w, "解析失败", http.StatusBadRequest)
            return
        }

        username := strings.TrimSpace(r.FormValue("username"))
        content := strings.TrimSpace(r.FormValue("content"))

        if username == "" || content == "" {
            http.Error(w, "昵称和内容不能为空", http.StatusBadRequest)
            return
        }

        // 保存新留言
        msg := Message{
            ID:        nextID,
            Username:  username,
            Content:   content,
            CreatedAt: time.Now(),
        }
        messages = append(messages, msg)
        nextID++

        // 提交后重定向到首页,避免重复提交
        http.Redirect(w, r, "/", http.StatusSeeOther)
    })

    fmt.Println("服务器运行中:https://www./link/cbb686245ece57c9827c4bc0d0654a8e")
    http.ListenAndServe(":8080", nil)
}

4. 运行与注意事项

  • 确保 index.htmlmain.go 在同一目录
  • 运行 go run main.go,打开 https://www./link/cbb686245ece57c9827c4bc0d0654a8e
  • 每次重启程序,留言会清空 —— 如需持久化,可扩展为写入 JSON 文件或接入数据库
  • 模板中使用 {{.Content | html}} 是为防止 XSS,自动转义 HTML 特殊字符
  • 生产环境建议加 CSRF 防护、输入长度限制、验证码等,但基础逻辑已清晰呈现


# html  # js  # json  # go  # golang  # 处理器  # app  # usb  # ai  # 路由  # 表单提交  # 标准库  # red  # xss  # csrf  # 结构体  # 数据结构  # 切片  # sqlite  # postgresql  # 数据库  # http  # 表单  # 放在  # 重定向  # 暂无  # 提交后  # 如需  # 重启  # 验证码  # 首页 


相关文章: 如何选择高效便捷的WAP商城建站系统?  制作表格网站有哪些,线上表格怎么弄?  企业网站制作费用多少,企业网站空间一般需要多大,费用是多少?  建站之星收费标准详解:套餐费用及年费价格表一览  建站为何优先选择香港服务器?  如何使用Golang安装API文档生成工具_快速生成接口文档  北京营销型网站制作公司,可以用python做一个营销推广网站吗?  上海网站制作开发公司,上海买房比较好的网站有哪些?  网站网页制作电话怎么打,怎样安装和使用钉钉软件免费打电话?  jQuery 常见小例汇总  如何在阿里云虚拟服务器快速搭建网站?  建设网站制作价格,怎样建立自己的公司网站?  建站之星安装后界面空白如何解决?  免费视频制作网站,更新又快又好的免费电影网站?  焦点电影公司作品,电影焦点结局是什么?  如何通过IIS搭建网站并配置访问权限?  建站主机系统SEO优化与智能配置核心关键词操作指南  企业在线网站设计制作流程,想建设一个属于自己的企业网站,该如何去做?  css网站制作参考文献有哪些,易聊怎么注册?  广州建站公司哪家好?十大优质服务商推荐  网页设计网站制作软件,microsoft office哪个可以创建网页?  广平建站公司哪家专业可靠?如何选择?  常州企业建站如何选择最佳模板?  如何通过万网虚拟主机快速搭建网站?  如何挑选高效建站主机与优质域名?  股票网站制作软件,网上股票怎么开户?  在线制作视频的网站有哪些,电脑如何制作视频短片?  清除minerd进程的简单方法  c# F# 的 MailboxProcessor 和 C# 的 Actor 模型  详解ASP.NET 生成二维码实例(采用ThoughtWorks.QRCode和QrCode.Net两种方式)  如何在IIS中配置站点IP、端口及主机头?  网站制作知乎推荐,想做自己的网站用什么工具比较好?  h5网站制作工具有哪些,h5页面制作工具有哪些?  香港服务器租用每月最低只需15元?  动图在线制作网站有哪些,滑动动图图集怎么做?  如何通过.red域名打造高辨识度品牌网站?  为什么Go需要go mod文件_Go go mod文件作用说明  郑州企业网站制作公司,郑州招聘网站有哪些?  北京网站制作的公司有哪些,北京白云观官方网站?  logo在线制作免费网站在线制作好吗,DW网页制作时,如何在网页标题前加上logo?  如何在橙子建站上传落地页?操作指南详解  上海网站制作网站建设公司,建筑电工证网上查询系统入口?  Python lxml的etree和ElementTree有什么区别  整蛊网站制作软件,手机不停的收到各种网站的验证码短信,是手机病毒还是人为恶搞?有这种手机病毒吗?  香港服务器租用费用高吗?如何避免常见误区?  建站之星多图banner生成与模板自定义指南  如何配置FTP站点权限与安全设置?  制作宣传网站的软件,小红书可以宣传网站吗?  内部网站制作流程,如何建立公司内部网站?  C++中引用和指针有什么区别?(代码说明) 

您的项目需求

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