没有合适的资源?快使用搜索试试~ 我知道了~
上篇关于Go模板库应用 的文章最后我们留下一个问题,页面模板是通过 CDN 引用的 BootStrap 的 css , js 文件。到目前位置我们的服务器还无法伺服客户端的静态文件请求把服务器磁盘上的文件响应给客户端。使用和配置过 Nginx 服务器的一定知道 Nginx 天然支持静态资源的访问,那么我们是不是也要借助 Nginx 才能实现处理静态文件请求呢?其实不是,在最开始的文章我们说过“Go语言不需要依赖任何第三方组件就能构建并启动一个高并发的 HTTP 服务器。”,这篇文章就让我们了解一下如何用 Go 语言的 net/http 库实现处理静态资源请求的问题。 我们先用一个简单的例子学习
资源详情
资源评论
资源推荐
使用使用Go语言创建静态文件服务器问题语言创建静态文件服务器问题
上篇关于Go模板库应用 的文章最后我们留下一个问题,页面模板是通过 CDN 引用的 BootStrap 的 css , js 文件。到目前位
置我们的服务器还无法伺服客户端的静态文件请求把服务器磁盘上的文件响应给客户端。使用和配置过 Nginx 服务器的一定
知道 Nginx 天然支持静态资源的访问,那么我们是不是也要借助 Nginx 才能实现处理静态文件请求呢?其实不是,在最开始
的文章我们说过“Go语言不需要依赖任何第三方组件就能构建并启动一个高并发的 HTTP 服务器。”,这篇文章就让我们了解
一下如何用 Go 语言的 net/http 库实现处理静态资源请求的问题。
我们先用一个简单的例子学习一下使用 net/http 如何创建一个静态资源服务器,然后再应用到我们的 http_demo 项目中。
创建静态资源服务器创建静态资源服务器
我们新建一个 main.go 存放创建静态资源服务器和监听请求的代码,同时在相同目录下创建 assets/css 和 assets/js 目录用于
存放上篇文章页面模板使用到的静态文件。
main.go
assets/
└── css
└── bootstrap.min.css
└── js
└── bootstrap.min.js
main.go 中的代码如下:
package main
import "net/http"
func main() {
fs := http.FileServer(http.Dir("assets/"))
http.Handle("/static/", http.StripPrefix("/static/", fs))
http.ListenAndServe(":8080", nil)
}
首先我们使用 http.FileServer 创建一个使用给定文件系统的内容响应所有 HTTP 请求的处理程序。
http.Handle(“/static/”, http.StripPrefix(“/static/”, fs)) 让文件服务器使用 assets 目录下的文件响应 URL 路径以 /static/ 开头的所
有 HTTP 请求。
assets 被设置为文件服务器的文件系统根目录,文件服务器会处理以 /static 开头的 URL 的请求,所以我们需要使用
http.StripPrefix() 把 static 前缀去掉才能在 assets 目录中搜索到请求的文件。
运行程序,然后用 cURL 请求一下 css 文件,看看有没有奏效。
$ go run main.go
$ curl -s http://localhost:8080/static/css/styles.css
/*!
* Bootstrap v3.3.7 (http://getbootstrap.com)
* Copyright 2011-2016 Twitter, Inc.
......
结合结合 gorillia/mux 使用文件服务器使用文件服务器
上面的例子中文件服务器的处理程序是注册到 net/http 库提供的标准的 ServeMux (服务复用器)中的,我们 http_demo 项
目为了支持复杂的路由注册使用的是 gorillia/mux 库提供的服务复用器。两者的工作方式不太一样,所以把文件服务器应用到
我们项目里还需要做些调整才能起作用。
首先我们先把 assets 目录整个拷贝到项目的根目录。
func RegisterRoutes(r *mux.Router) {
// serve static file request
fs := http.FileServer(http.Dir("assets/"))
serveFileHandler := http.StripPrefix("/static/", fs)
r.PathPrefix("/static/").Handler(serveFileHandler)
......
}
使用 router.PathPrefix("/static") 创建一个匹配有 /static 前缀请求的路由。
weixin_38521169
- 粉丝: 10
- 资源: 995
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0