go-zero 微服务框架中的静态文件服务
在 go-zero
微服务框架中,实现静态文件服务可以通过多种方式来完成。
一种常见的方式是利用 go
标准库中的 http.FileServer
。以下是一个简单的示例代码:
package main import ( "log" "net/http" ) func main() { // 设置静态文件的根目录 fs := http.FileServer(http.Dir("static")) // 注册静态文件服务的路由 http.Handle("/static/", http.StripPrefix("/static/", fs)) // 启动服务,监听 8080 端口 if err := http.ListenAndServe(":8080", nil); err!= nil { log.Fatal(err) } }
在上述代码中,指定了 static
目录为静态文件的根目录,通过 http.StripPrefix
去除了 /static/
前缀,使得访问 /static/
开头的路径能够正确获取到对应的静态文件。
另外,还可以结合 go-zero
框架提供的路由机制来更灵活地配置静态文件服务的路由规则。例如,可以根据不同的请求路径或条件,决定是否提供静态文件服务,或者对访问权限进行控制。
例如,如果只想在特定的 API 路径下提供静态文件服务,可以这样设置路由:
package main import ( "github.com/zeromicro/go-zero/rest" "log" "net/http" ) func main() { r := rest.NewRouter() // 只在 /api/static 路径下提供静态文件服务 r.GET("/api/static/*", func(ctx rest.Context) { fs := http.FileServer(http.Dir("static")) http.StripPrefix("/api/static/", fs).ServeHTTP(ctx.ResponseWriter(), ctx.Request()) }) s := rest.Server{ Addr: ":8080", Handler: r, } if err := s.Start(); err!= nil { log.Fatal(err) } }
通过这样的配置,可以更精细地控制静态文件服务的暴露范围和条件。