跳转到主内容
极星编程网:以代码为星,赴技术山海!

如何使用Golang开发简单投票系统_统计用户投票和结果展示

Go投票系统核心是用sync.RWMutex保护的map实现内存存储:Votes记录选项票数,Voted去重用户ID;提供/vote(防重提交)和/results(JSON返回统计)两个HTTP接口,支持单机轻量部署。 用 Go 语言开发一个简单投票系统,核心在于:定义投票结构、处理用户提交(防重复)、安全计数、提供结果接口。不需要数据库也能跑起来,适合学习和轻量部署。 数据结构与内存存储设计 投票系统最简实现可用内存 map 模拟存储,适合单机、小流量场景: 用 map[string]int 记录每个选项的票数(如
votes["Go"] = 12
) 用 map[string]bool 或 map[string]struct{} 记录已投票用户 ID(如 IP 或 token),防止刷票 定义结构体封装状态,便于后续扩展:
type VoteSystem struct {
Votes map[string]int
Voted map[string]struct{} // 用户标识去重
mu sync.RWMutex
}
HTTP 接口实现(投票 + 查询) 使用标准
net/http
即可,两个关键接口: POST /vote :接收 JSON 投票请求,校验用户是否已投,更新计数 示例请求:
{"user_id":"u123", "option":"Rust"}
GET /results :返回当前各选项票数及总票数,支持 JSON 输出 返回示例:
{"Go":42,"Rust":28,"Zig":5,"total":75}
注意加锁(
mu.Lock()
/
mu.RLock()
)避免并发写冲突。 立即学习 “ go语言免费学习笔记(深入) ”; go语言参考手册 中文CHM版 Go 是一个开源的编程语言,它能让构造简单、可靠且高效的软件变得容易。本文给大家带来Go参考手册,需要的可以来下载! Go是从2007年末由Robert Griesemer, Rob Pike, Ken Thompson主持开发,后来还加入了Ian Lance Taylor, Russ Cox等人,并最终于2009年11月开源,在2012年早些时候发布了Go 1稳定版本。现在Go的开发已经是完全开放的,并且拥有一个活跃的社区。 Go 语言特色 简洁、快速、安全 并行、有趣、开源 内存管理、v数组安全、编译 下载 防重复投票的关键逻辑 仅靠 前端 限制不可靠,服务端必须校验: 提取唯一用户标识:可用
user_id
(推荐)、 session token 或哈希后的 IP(不精准但够用) 在
/vote
处理中先查
voted[user_id]
,存在则返回
400 Bad Request
成功投票后立即写入
voted[user_id] = struct{}{}
和
votes[option]++
运行与测试建议 启动后用 curl 快速验证流程: 投一票:
curl -X POST http://localhost:8080/vote -H "Content-Type: application/json" -d '{"user_id":"alice","option":"Go"}'
查结果:
curl http://localhost:8080/results
再投同用户会失败,说明防重生效 后续可平滑升级:把 map 换成 Redis 存储、加 JWT 验证、支持多轮投票、添加管理后台等。

相关文章