0

0

Go语言如何写一个TODO应用_Golang初级项目完整示例

P粉602998670

P粉602998670

发布时间:2026-01-12 17:10:37

|

314人浏览过

|

来源于php中文网

原创

Go TODO应用用net/http实现轻量Web服务,以切片+sync.RWMutex管理并发安全的TODO数据,通过http.HandleFunc路由、template渲染HTML、r.ParseForm解析表单,并注意重定向后return避免重复响应。

go语言如何写一个todo应用_golang初级项目完整示例

Go 语言写一个 TODO 应用,不需要框架也能快速跑起来——核心是用 net/http 搭个轻量 Web 服务,配合内存存储(如 map 或切片)完成增删查改。真正卡住新手的不是语法,而是路由设计、请求解析、状态保持这几个环节。

http.HandleFunc 实现基础路由和 HTML 渲染

别急着上 gorilla/muxgin,先用标准库把流程走通。每个路由对应一个函数,用 http.ServeFile 静态服务 HTML,用 template 渲染动态内容。

关键点:

  • http.HandleFunc 的第二个参数必须是 func(http.ResponseWriter, *http.Request) 类型
  • HTML 表单的 method 要和 Go 中判断的 r.Method 一致(比如 POST 提交就要检查 r.Method == "POST"
  • 渲染模板前务必调用 template.ParseFiles(),且路径要相对于执行时的当前目录(不是源码目录)

struct 和切片管理 TODO 数据,避免全局 map 并发问题

初学者常直接用 var todos = make(map[int]*Todo),但 HTTP 处理函数是并发调用的,map 非线程安全。更稳妥的做法是用切片 + 互斥锁,或干脆用 sync.Map(适合读多写少)。

立即学习go语言免费学习笔记(深入)”;

推荐结构:

type Todo struct {
	ID     int    `json:"id"`
	Text   string `json:"text"`
	Done   bool   `json:"done"`
}

var (
	todos = []Todo{}
	mu    sync.RWMutex
)

所有读写操作前后加 mu.Lock()/mu.Unlock()mu.RLock()/mu.RUnlock()

ClipDrop Relight
ClipDrop Relight

ClipDrop推出的AI图片图像打光工具

下载

处理表单提交:用 r.ParseForm()r.FormValue() 取值

Go 不会自动解析 POST 表单,必须显式调用 r.ParseForm(),否则 r.FormValue("text") 返回空字符串。常见错误包括:

  • 忘记调用 r.ParseForm(),尤其在 if r.Method == "POST" 分支里
  • HTML 表单中 缺少 name="text" 属性,导致 r.FormValue("text") 找不到键
  • 重定向后没加 return,导致后续代码继续执行并重复写响应(HTTP 500 或 “http: multiple response.WriteHeader calls” 错误)

典型处理逻辑:

if r.Method == "POST" {
	r.ParseForm()
	text := r.FormValue("text")
	if text != "" {
		mu.Lock()
		todos = append(todos, Todo{
			ID:   len(todos) + 1,
			Text: text,
			Done: false,
		})
		mu.Unlock()
	}
	http.Redirect(w, r, "/", http.StatusSeeOther)
	return
}

html/template 安全渲染列表,防止 XSS

直接拼接 HTML 字符串(如 w.Write([]byte("

  • " + t.Text + "
  • ")))有 XSS 风险。必须用 html/template,它会自动转义变量内容。

    模板示例(保存为 index.html):

    {{range .Todos}}
    
  • {{.Text}}
  • {{else}}
  • No todos yet.
  • {{end}}

    渲染时传入数据结构:

    data := struct {
    	Todos []Todo
    }{
    	Todos: todos,
    }
    tmpl.Execute(w, data)

    注意:模板中字段名首字母必须大写(Text 可导出,text 不可),否则无法访问。

    相关专题

    更多
    html版权符号
    html版权符号

    html版权符号是“©”,可以在html源文件中直接输入或者从word中复制粘贴过来,php中文网还为大家带来html的相关下载资源、相关课程以及相关文章等内容,供大家免费下载使用。

    605

    2023.06.14

    html在线编辑器
    html在线编辑器

    html在线编辑器是用于在线编辑的工具,编辑的内容是基于HTML的文档。它经常被应用于留言板留言、论坛发贴、Blog编写日志或等需要用户输入普通HTML的地方,是Web应用的常用模块之一。php中文网为大家带来了html在线编辑器的相关教程、以及相关文章等内容,供大家免费下载使用。

    644

    2023.06.21

    html网页制作
    html网页制作

    html网页制作是指使用超文本标记语言来设计和创建网页的过程,html是一种标记语言,它使用标记来描述文档结构和语义,并定义了网页中的各种元素和内容的呈现方式。本专题为大家提供html网页制作的相关的文章、下载、课程内容,供大家免费下载体验。

    466

    2023.07.31

    html空格
    html空格

    html空格是一种用于在网页中添加间隔和对齐文本的特殊字符,被用于在网页中插入额外的空间,以改变元素之间的排列和对齐方式。本专题为大家提供html空格的相关的文章、下载、课程内容,供大家免费下载体验。

    245

    2023.08.01

    html是什么
    html是什么

    HTML是一种标准标记语言,用于创建和呈现网页的结构和内容,是互联网发展的基石,为网页开发提供了丰富的功能和灵活性。本专题为大家提供html相关的各种文章、以及下载和课程。

    2882

    2023.08.11

    html字体大小怎么设置
    html字体大小怎么设置

    在网页设计中,字体大小的选择是至关重要的。合理的字体大小不仅可以提升网页的可读性,还能够影响用户对网页整体布局的感知。php中文网将介绍一些常用的方法和技巧,帮助您在HTML中设置合适的字体大小。

    503

    2023.08.11

    html转txt
    html转txt

    html转txt的方法有使用文本编辑器、使用在线转换工具和使用Python编程。本专题为大家提供html转txt相关的文章、下载、课程内容,供大家免费下载体验。

    310

    2023.08.31

    html文本框代码怎么写
    html文本框代码怎么写

    html文本框代码:1、单行文本框【<input type="text" style="height:..;width:..;" />】;2、多行文本框【textarea style=";height:;"></textare】。

    423

    2023.09.01

    Java 项目构建与依赖管理(Maven / Gradle)
    Java 项目构建与依赖管理(Maven / Gradle)

    本专题系统讲解 Java 项目构建与依赖管理的完整体系,重点覆盖 Maven 与 Gradle 的核心概念、项目生命周期、依赖冲突解决、多模块项目管理、构建加速与版本发布规范。通过真实项目结构示例,帮助学习者掌握 从零搭建、维护到发布 Java 工程的标准化流程,提升在实际团队开发中的工程能力与协作效率。

    9

    2026.01.12

    热门下载

    更多
    网站特效
    /
    网站源码
    /
    网站素材
    /
    前端模板

    精品课程

    更多
    相关推荐
    /
    热门推荐
    /
    最新课程
    Bootstrap 5教程
    Bootstrap 5教程

    共46课时 | 2.9万人学习

    AngularJS教程
    AngularJS教程

    共24课时 | 2.5万人学习

    CSS教程
    CSS教程

    共754课时 | 18.5万人学习

    关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
    php中文网:公益在线php培训,帮助PHP学习者快速成长!
    关注服务号 技术交流群
    PHP中文网订阅号
    每天精选资源文章推送

    Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号