如何用golang搭建一个web框架?
- 内容介绍
- 文章标签
- 相关推荐
本文共计942个文字,预计阅读时间需要4分钟。
Go 构建Web框架不是搭建积木,而是明确选择控制权到谁手中:
为什么 http.ListenAndServe 启动了却没响应?
常见现象是端口监听成功(netstat -an | grep 8080 能看到),但 curl http://localhost:8080 一直 pending。根本原因不是代码写错,而是没把请求真正“交出去”:
-
http.ListenAndServe(":8080", nil)中的nil表示用默认http.DefaultServeMux,但如果你没调过http.HandleFunc注册任何路由,它只会对所有路径返回 404 —— 连日志都不打,容易误判为“卡住” - 自定义
http.ServeMux实例后,必须显式传给ListenAndServe,比如http.ListenAndServe(":8080", mux);漏掉第二个参数,等于还在用空的默认多路复用器 - 用
gin.New()或echo.New()时,框架实例本身不启动监听,必须调e.Start(":8080")或r.Run(":8080");只写路由不调启动函数,进程就停在初始化阶段
路由参数提取不到(c.Param("id") 为空)的硬约束
路径参数不是正则模糊匹配,而是严格字符串前缀比对。
本文共计942个文字,预计阅读时间需要4分钟。
Go 构建Web框架不是搭建积木,而是明确选择控制权到谁手中:
为什么 http.ListenAndServe 启动了却没响应?
常见现象是端口监听成功(netstat -an | grep 8080 能看到),但 curl http://localhost:8080 一直 pending。根本原因不是代码写错,而是没把请求真正“交出去”:
-
http.ListenAndServe(":8080", nil)中的nil表示用默认http.DefaultServeMux,但如果你没调过http.HandleFunc注册任何路由,它只会对所有路径返回 404 —— 连日志都不打,容易误判为“卡住” - 自定义
http.ServeMux实例后,必须显式传给ListenAndServe,比如http.ListenAndServe(":8080", mux);漏掉第二个参数,等于还在用空的默认多路复用器 - 用
gin.New()或echo.New()时,框架实例本身不启动监听,必须调e.Start(":8080")或r.Run(":8080");只写路由不调启动函数,进程就停在初始化阶段
路由参数提取不到(c.Param("id") 为空)的硬约束
路径参数不是正则模糊匹配,而是严格字符串前缀比对。

