答案:使用Golang标准库实现Todo应用,通过定义Todo结构体和内存切片存储数据,利用net/http包注册路由处理增删改查请求,支持JSON格式通信,无需数据库,适合学习Web开发基础。

用Golang实现一个简单的Todo应用,可以借助标准库快速搭建HTTP服务,使用内存存储数据。整个过程不依赖数据库,适合学习Go语言的Web开发基础。
1. 定义Todo结构体和数据存储
每个Todo任务通常包含ID、标题和完成状态。使用结构体表示,并用切片在内存中保存数据。
type Todo struct {
ID int `json:"id"`
Title string `json:"title"`
Done bool `json:"done"`
}
var todos []Todo
var nextID = 1
初始化一个全局切片todos模拟数据库,nextID用于生成唯一ID。
2. 实现HTTP路由和处理函数
使用net/http包注册路由,处理增删改查请求。每个接口返回JSON格式数据。
立即学习“go语言免费学习笔记(深入)”;
获取所有Todo列表:
功能简介:1.用户留言功能2.用户定货功能3.定制货货功能4.定制网页样式和其实设置(比如主页)5.强大的管理功能(现在的程序都是管理功能大于应用功能:)6.管理功能支持查看订货单,留言,分页,删除等功能管理页面:login.asp管理密码:admin
func getTodos(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "application/json")
json.NewEncoder(w).Encode(todos)
}
添加新的Todo:
func createTodo(w http.ResponseWriter, r *http.Request) {
var newTodo Todo
if err := json.NewDecoder(r.Body).Decode(&newTodo); err != nil {
http.Error(w, "Invalid JSON", http.StatusBadRequest)
return
}
newTodo.ID = nextID
nextID++
todos = append(todos, newTodo)
w.Header().Set("Content-Type", "application/json")
w.WriteHeader(http.StatusCreated)
json.NewEncoder(w).Encode(newTodo)
}
更新或删除指定ID的Todo:
func updateTodo(w http.ResponseWriter, r *http.Request) {
idStr := strings.TrimPrefix(r.URL.Path, "/todos/")
id, _ := strconv.Atoi(idStr)
for i := range todos {
if todos[i].ID == id {
json.NewDecoder(r.Body).Decode(&todos[i])
json.NewEncoder(w).Encode(todos[i])
return
}
}
http.Error(w, "Todo not found", http.StatusNotFound)
}
func deleteTodo(w http.ResponseWriter, r *http.Request) {
idStr := strings.TrimPrefix(r.URL.Path, "/todos/")
id, _ := strconv.Atoi(idStr)
for i, todo := range todos {
if todo.ID == id {
todos = append(todos[:i], todos[i+1:]...)
w.WriteHeader(http.StatusNoContent)
return
}
}
http.Error(w, "Todo not found", http.StatusNotFound)
}
3. 启动HTTP服务器
在main函数中注册路由并启动服务器。
func main() {
http.HandleFunc("GET /todos", getTodos)
http.HandleFunc("POST /todos", createTodo)
http.HandleFunc("PUT /todos/{id}", updateTodo)
http.HandleFunc("DELETE /todos/{id}", deleteTodo)
fmt.Println("Server starting on :8080...")
http.ListenAndServe(":8080", nil)
}
注意:Go 1.22+支持模式匹配路由,如"PUT /todos/{id}"可自动提取路径变量。
4. 测试API示例
使用curl测试功能是否正常:
- 查看所有任务:
curl http://localhost:8080/todos - 添加任务:
curl -X POST -H "Content-Type: application/json" -d '{"title":"Learn Go","done":false}' http://localhost:8080/todos - 更新任务:
curl -X PUT -H "Content-Type: application/json" -d '{"title":"Learn Go","done":true}' http://localhost:8080/todos/1 - 删除任务:
curl -X DELETE http://localhost:8080/todos/1









