答案是使用golang搭建一个简易问卷系统,通过定义Survey和Response结构体,实现展示问卷、提交回答和查看结果的完整流程。

用golang开发一个简单的问卷调查项目,核心是搭建http服务、设计数据结构、处理表单提交和展示结果。整个过程不复杂,适合初学者练手。以下是具体实现思路和步骤。
1. 项目结构设计
先规划基础目录结构,便于后续维护:
- main.go:主程序入口
- handlers/:存放HTTP处理器函数
- models/:定义问卷和回答的数据结构
- templates/:html模板文件
- Static/:存放css、JS等静态资源(可选)
2. 定义数据模型
在 models/questionnaire.go 中定义问卷和回答的结构:
package models type Question struct { ID int Text string Type string // "text", "radio", "checkbox" Options []string } type Survey struct { Title string Questions []Question } type Response struct { Answers map[int]string // 简化版:问题ID -> 回答内容 }
可以用全局变量临时存储问卷和收集的回答,适合小项目:
立即学习“go语言免费学习笔记(深入)”;
var CurrentSurvey Survey var Responses []Response
3. 编写HTTP处理器
在 handlers/survey.go 中实现三个主要接口:
- GET /:显示问卷页面
- POST /submit:接收提交的答案
- GET /result:查看统计结果
示例代码片段:
func ShowSurvey(w http.ResponseWriter, r *http.Request) { tmpl := template.Must(template.ParseFiles("templates/survey.html")) tmpl.Execute(w, CurrentSurvey) } func SubmitResponse(w http.ResponseWriter, r *http.Request) { if r.Method != "POST" { http.redirect(w, r, "/", http.StatusSeeOther) return } r.ParseForm() response := Response{Answers: make(map[int]string)} for i := range CurrentSurvey.Questions { key := fmt.Sprintf("q%d", i) response.Answers[i] = r.FormValue(key) } Responses = append(Responses, response) http.Redirect(w, r, "/result", http.StatusSeeOther) }
4. 创建HTML模板
在 templates/survey.html 中动态生成表单:
<h1>{{.Title}}</h1> <form method="post" action="/submit"> {{range $index, $q := .Questions}} <p> <label>{{$q.Text}}</label> {{if eq $q.Type "text"}} <input type="text" name="q{{$index}}" required> {{else if eq $q.Type "radio"}} {{range $opt := $q.Options}} <input type="radio" name="q{{$index}}" value="{{$opt}}" required> {{$opt}}<br> {{end}} {{end}} </p> {{end}} <button type="submit">提交</button> </form>
结果页可简单列出所有回答数量或原始数据。
5. 主程序启动服务
在 main.go 中注册路由并启动服务器:
func main() { // 初始化问卷 CurrentSurvey = models.Survey{ Title: "用户满意度调查", Questions: []models.Question{ {ID: 0, Text: "您对我们的服务满意吗?", Type: "radio", Options: []string{"满意", "一般", "不满意"}}, {ID: 1, Text: "建议:", Type: "text"}, }, } // 路由 http.HandleFunc("/", handlers.ShowSurvey) http.HandleFunc("/submit", handlers.SubmitResponse) http.HandleFunc("/result", handlers.ShowResult) // 静态资源(可选) http.Handle("/static/", http.StripPrefix("/static/", http.FileServer(http.Dir("static")))) println("服务运行在 :8080") http.ListenAndServe(":8080", nil) }
基本上就这些。运行后访问 http://localhost:8080 即可填写问卷。


