17370845950

如何在Golang中开发简易投票网站_前端提交数据后台统计
用Go标准库实现简易投票网站:前端HTML表单以POST提交单选选项,后端用sync.Map内存计数并重定向,/路径动态渲染统计结果与表单,支持实时查看票数变化。

用 Go 开发一个简易投票网站,核心在于:前端表单提交选项,后端接收并持久化计数,再实时展示统计结果。不需要复杂框架,标准库 net/http 和少量 HTML 即可实现。

前端:简洁表单 + 选项提交

写一个静态 HTML 页面(如 index.html),包含投票选项和提交按钮。关键点是使用 POST 方法提交,每个选项用 name="choice" 的单选按钮(radio):




注意:action="/vote" 指向后端处理路径;所有选项共享同一个 name,确保单选互斥。

后台:接收、计数、存储(内存版)

Go 后端用 http.HandleFunc 处理两个路由:/ 返回页面,/vote 接收表单数据。用 sync.Map 安全地在内存中累计票数(适合演示,生产环境应换数据库):

  • 定义全局 var votes = sync.Map{} 存储各选项的票数(key=string, value=int64)
  • /vote 处理器中调用 r.ParseForm(),再用 r.FormValue("choice") 获取选中的值
  • votes.LoadOrStore(choice, int64(0)) 初始化,再用 atomic.AddInt64 增加票数(需先断言为 *int64 或改用封装结构)
  • 处理完重定向回 /,避免重复提交

统计展示:动态渲染结果

/ 的处理器中,遍历 votes 读取所有选项及票数,拼接 HTML 字符串返回(或用 html/template 更清晰):

  • 先收集所有选项:可以预设选项列表([]string{"go", "rust", "python"}),避免漏显
  • 对每个选项,调用 votes.Load(option) 获取当前票数,转成整数
  • 在 HTML 中以列表或进度条形式展示,例如:
    Go: 12
  • 把原始表单也嵌入同一页面,实现“投完即见结果”

运行与验证

启动服务:go run main.go,浏览器访问 http://localhost:8080 即可投票。刷新页面查看统计变化。若需持久化,后续可替换 sync.Map 为 JSON 文件读写,或接入 SQLite。