Go投票系统核心是用sync.RWMutex保护的map实现内存存储:Votes记录选项票数,Voted去重用户ID;提供/vote(防重提交)和/results(JSON返回统计)两个HTTP接口,支持单机轻量部署。
用 Go 语言开发一个简单投票系统,核心在于:定义投票结构、处理用户提交(防重复)、安全计数、提供结果接口。不需要数据库也能跑起来,适合学习和轻量部署。
投票系统最简实现可用内存 map 模拟存储,适合单机、小流量场景:
]int 记录每个选项的票数(如 votes["Go"] = 12)type VoteSystem struct {
Votes map[string]int
Voted map[string]struct{} // 用户标识去重
mu sync.RWMutex
}
使用标准 net/http 即可,两个关键接口:
{"user_id":"u123", "option":"Rust"}
{"Go":42,"Rust":28,"Zig":5,"total":75}
注意加锁(mu.Lock() / mu.RLock())避免并发写冲突。
仅靠前端限制不可靠,服务端必须校验:
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 验证、支持多轮投票、添加管理后台等。