css文件修改后没变化 static_Go Web编程使用Go语言创建静态文件服务器

上篇关于Go模板库应用实践的文章最后我们留下一个问题,页面模板是通过 CDN引用的 BootStrapcssjs文件。到目前位置我们的服务器还无法伺服客户端的静态文件请求把服务器磁盘上的文件响应给客户端。使用和配置过 Nginx服务器的一定知道 Nginx天然支持静态资源的访问,那么我们是不是也要借助 Nginx才能实现处理静态文件请求呢?其实不是,在最开始的文章我们说过“Go语言不需要依赖任何第三方组件就能构建并启动一个高并发的 HTTP 服务器。”,这篇文章就让我们了解一下如何用 Go语言的 net/http库实现处理静态资源请求的问题。

我们先用一个简单的例子学习一下使用 net/http如何创建一个静态资源服务器,然后再应用到我们的 http_demo项目中。

Go Web 编程系列的每篇文章的源代码都打了对应版本的软件包,供大家参考。公众号中回复 gohttp08获取本文源代码

创建静态资源服务器

我们新建一个 main.go存放创建静态资源服务器和监听请求的代码,同时在相同目录下创建 assets/cssassets/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前缀请求的路由。

  • 然后使用 route.Handler方法将文件服务器注册成路由对应的处理程序( Handler是 *mux.Route上的方法)。

注册好文件服务器后,我们把之前页面模板引用的 CDN上的 jscss文件换成自己服务器上的文件链接。

lang="en">

......

href="/static/css/bootstrap.min.css" rel="stylesheet">

{{ template "nav" .}}

class="container">

{{template "content" .}}

然后重启服务器,访问之前的页面 http:localhost:/view/index,验证一下我们的服务器现在是否能伺服静态文件的请求了。

308ebc5b3e85b56b420226c7ad26f0ee.png

页面样式正常,现在只要在服务器这个 assets目录下的文件,我们都可以通过 http://localhost:8000/static/*路径的 URL访问到。

今天的文章对应的源码已经打包上传,公众号回复 gohttp08获取下载链接,赶快下载下来动手练习一下吧。如果文章能帮助到你,不要忘记转发、点在看分享给更多人啊。关注公众号每周第一时间获取文章更新。

另外今天的题图是不是很有趣,两个小地鼠和背景都来自一部非常经典的电影。你能说出他们三个的名字吗?快来留言吧,让我看看你们都能给出什么答案c2db784d2f909f7174dd70e07bb0076e.png001a2f0073751939beea49c53776bd84.png

推荐阅读

  • Go Web 编程--超详细的模板库应用指南


喜欢本文的朋友,欢迎关注“Go语言中文网”:

42158a858e46737bd4494dc0aeaa7d4d.png

Go语言中文网启用微信学习交流群,欢迎加微信:274768166,投稿亦欢迎

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/264168.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【linux】学习2

鸟哥那本书的第6章 文件权限: ^ ^ ^ ^ ^ ^ ^ 1 2 3 4 5 6 7 文件有 文件所有者、文件所属用户组 的概念如上图. 1. 十个字母表示文件…

IE 8 开发人员工具详解 【转载】

我的体会,IE 8 较之前面的的版本还是有不少改进的。使用体验上好很多,速度也不错。IE 要继续加油, 对于网页开发人员,IE8也提供了一个所谓的开发人员工具,通过F12可以调用出来 关于这套工具的使用细节,我就…

scrollwidth ,clientwidth ,offsetwidth 三者的区别

clientwidth:内容可视区域的宽度 offsetwidth:元素整体宽度 scrollwidth:实际内容的宽度 转载于:https://www.cnblogs.com/cuijin-book/p/10760656.html

python运算符与表达式

2019独角兽企业重金招聘Python工程师标准>>> 运算符用于连接两个相同类型的序列,s*n用于创建一个序列的n个副本。但是这些都是仅仅复制元素引用的浅复制。 例: a[3,4,5] b[a] c2*b 则c[[3,4,5],[3,4,5]] a[0]-7; 则c[[-7,4,5],[-7,4,5]]. 也…

phper必知必会之类库自动加载的七种方式(三)

## php自动加载 下面显示例子的文件目录结构图 一、没有使用命名空间的几种实现 test/oneClass.php class oneClass{public function show(){echo "这里是oneClass.php的show方法<br/>";}} test/twoClass.php <?phpclass twoClass{public function show(){…

c++ 箭头符号怎么打_焊接图纸符号标注图解示例,焊接符号标注实例及方法

基本坡口符号坡口符号(注&#xff1a;图中“破”应为“坡”)焊接图纸符号标注图解示例焊接符号标注实例及方法在焊接结构图样上&#xff0c;焊接方法可按国家标准GB5185-85的规定用阿拉伯效字表示&#xff0c;标注在指引线的尾部。常用焊接方法代号见表3-9所示。如果是组合焊接…

演示: GTS流量×××和CAR流量监管的效果及相关实践计划

演示&#xff1a; GTS流量和CAR流量监管的效果及相关实践计划演示目标&#xff1a;1 理解clock rate(时钟频率)和bandwidth&#xff08;带宽&#xff09;与接入速率的关系2 在模拟运营商的接入路由器ISP上配置CAR监管用户流量到认购速率64K3 取证模拟的企业网络以128K的接入速率…

跨线程访问控件

【转帖】 我们在做winform应用的时候&#xff0c;大部分情况下都会碰到使用多线程控制界面上控件信息的问题。然而我们并不能用传统方法来做这个问题&#xff0c;下面我将详细的介绍。 首先来看传统方法&#xff1a; public partial class Form1 : Form { public Fo…

解析Nginx负载均衡

摘要&#xff1a;对于一个大型网站来说&#xff0c;负载均衡是永恒的话题。随着硬件技术的迅猛发展&#xff0c;越来越多的负载均衡硬件设备涌现出来&#xff0c;如F5 BIG-IP、Citrix NetScaler、Radware等等&#xff0c;虽然可以解决问题&#xff0c;但其高昂的价格却往往令人…

深圳办理cdn经营许可证_深圳危化品经营许可证申请流程怎么申请?办理危化学品经营许可证...

随着深圳地区慢慢的进入了产业整合和城市规划规范化的运营中&#xff0c;很多涉及到生产的公司都逐渐被有效的整合在一起了&#xff0c;而随着深圳地区越发有效的整合生产规划&#xff0c;很多地区都逐渐的在将涉及到危险化学品生产和经营的企业都进行合理的管制&#xff0c;在…

Discuz!NT 缓存设计简析 [原创]

作为一个社区类型软件&#xff0c;大并发支持和高效稳定运行永远是“硬道理”&#xff0c;而有效安全的使用缓存恰恰能起到事倍功半的效果。而.NET本身所提供的缓存机制又显得过于“单薄”&#xff0c;比如说订制不太灵活方便, 缓存对象之间层次感不强, 使用时缺乏统一的管理等…

VSCode从下载到配置Ubuntu系统

Visual Studio Code从下载到配置Ubuntu系统 一、下载和安装Visual Studio Code 1、进入Visual Studio Code官网&#xff08;Visual Studio Code - Code Editing. Redefined&#xff09;&#xff0c;点击箭头所指地方下载红框内的安装包&#xff1b; 2、因为是国外网址下载&am…

python 写入excel 日期_Python实例:excel文档写入操作

来自PythonABC.org老师的课程很好&#xff0c;但是每个视频都蛮长的&#xff0c;听着听着就有些晕乎&#xff0c;所以根据视频自己整理了一下&#xff0c;以便记录学习使用Python实现excel的文档写操作import openpyxl from openpyxl.utils import get_column_letterwb openpy…

eclipse集成maven插件

一、准备工作 1. 安装jdk并配置&#xff1a;https://www.cnblogs.com/diandiangui/p/10002100.html  2. 已安装好 maven并配置&#xff1a;https://www.cnblogs.com/diandiangui/p/10768339.html  3. 安装eclipse并配置&#xff1a;https://www.cnblogs.com/diandiangui/p/…

批量改名_手把手教你用Python批量给图片添加水印 | 知了干货分享

我们在网上浏览一些文章的时候&#xff0c;经常会发现文章中会有一些图片&#xff0c;上面会有一些标识&#xff0c;而这些标识就是我们经常说的水印了。很多时候&#xff0c;我们需要给图片加上一些修饰&#xff0c;好让别人能直观的认识到这个图片的出处以及来源&#xff0c;…

linux环境下安装nginx步骤(不错)

开始前&#xff0c;请确认gcc g开发类库是否装好&#xff0c;默认已经安装。 ububtu平台编译环境可以使用以下指令 apt-get install build-essential apt-get install libtool centos平台编译环境使用如下指令 安装make&#xff1a; yum -y install gcc automake autoconf libt…

OpenGL.Tutorial15_Lightmaps

ZC&#xff1a;撤销 & 重做 — Blender Manual.html&#xff08;https://docs.blender.org/manual/zh-hans/dev/interface/undo_redo.html&#xff09; ZC&#xff1a;Blender下载地址&#xff1a;Index of _release_Blender2.50alpha_.html&#xff08;https://download.b…

后处理没有pui文件怎么打开_UG NX10.0四轴后处理下载(带PUI文件)

&#xfeff; 提示&#xff1a;点击上方"NX网"↑ 免费订阅 关注老叶NC程序演示&#xff1a;%G40 G17 G94 G80 G90M05M09G91 G28 Z0.0M01T00 M06(Tool NaneD4R0.5 XY 0.10mm Z0.00mm)(D4.00 R0.50 FL50.00 L75.00)G00 G90 G55 X68.263 Y.969 A187.77 S4500 M03G43 Z79…

catia v5法矢数据软件_catia介绍

CATIA是英文 Computer Aided Tri-Dimensional Interface Application 的缩写。 是世界上一种主流的CAD/CAE/CAM 一体化软件。在70年代Dassault Aviation 成为了第一个用户&#xff0c;CATIA 也应运而生。从1982年到1988年&#xff0c;CATIA 相继发布了1版本、2版本、3版本&…