用golang搭建http服务器需先注册处理函数再启动服务,具体步骤为:1.使用http.handlefunc注册路由及对应处理函数;2.通过http.listenandserve启动服务监听指定端口。如要处理不同路径,可多次调用http.handlefunc添加路由配置。若需提供静态文件服务,应使用http.fileserver结合http.stripprefix实现目录映射。对于中间件需求,则可通过封装http.handlerfunc实现日志记录、权限校验等功能,并将中间件应用到指定路由上。
用 golang 搭建一个简单的 HTTP 服务器其实挺直接的,特别是有了标准库 net/http 的支持。不需要装额外依赖,写几行代码就能跑起来。
最基础的 HTTP 服务怎么写
最简单的办法就是用
http.HandleFunc
注册一个处理函数,然后调用
http.ListenAndServe
启动服务。比如下面这段代码:
package main import ( "fmt" "net/http" ) func hello(w http.ResponseWriter, r *http.Request) { fmt.Fprintf(w, "Hello, World!") } func main() { http.HandleFunc("/", hello) http.ListenAndServe(":8080", nil) }
运行之后访问
http://localhost:8080
就能看到输出。这个例子注册了根路径
/
的处理函数,监听的是本地 8080 端口。这一步适合快速验证服务是否能跑通。
立即学习“go语言免费学习笔记(深入)”;
怎么处理不同的 URL 路径
如果你需要多个接口,比如
/about
或者
/api/data
,只需要再加几个
http.HandleFunc
即可:
http.HandleFunc("/about", func(w http.ResponseWriter, r *http.Request) { fmt.Fprintf(w, "About page") }) http.HandleFunc("/api/data", func(w http.ResponseWriter, r *http.Request) { fmt.Fprintf(w, `{"message": "some data"}`) })
这种写法在项目初期够用,但如果接口变多、逻辑复杂,建议把每个 handler 抽成单独的函数,或者引入结构体来组织业务逻辑。
静态文件服务怎么配
如果你想让服务器也能提供静态文件,比如 html、css 或 JS 文件,可以用
http.FileServer
。假设你有一个叫
的目录,里面放着你的前端资源:
http.Handle("/static/", http.StripPrefix("/static/", http.FileServer(http.Dir("static"))))
这样访问
/static/index.html
就会返回
static/index.html
的内容。注意要用
StripPrefix
去掉前缀,否则路径不匹配会报错。
中间件和自定义 Handler 怎么加
虽然默认的
http.HandleFunc
很方便,但想做中间件(比如记录日志、权限检查)的话,就需要自定义 handler。你可以写一个函数包装器:
func loggingMiddleware(next http.HandlerFunc) http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { fmt.Println("Received request:", r.URL.Path) next(w, r) } }
然后使用方式是:
http.HandleFunc("/", loggingMiddleware(hello))
这种方式可以灵活组合多个中间件,比如鉴权、限流等,适用于稍微正式一点的项目。
基本上就这些,用 net/http 包已经能满足大部分简单场景的需求。虽然没有框架那么强大,但胜在轻量、标准、稳定。
评论(已关闭)
评论已关闭