https://www.jb51.net/article/145764.htm

使用过golang语言的程序猿都应该知道,在使用golang开发的时候,我们是不需要诸如iis,apache,nginx,kangle等服务器支持的。

为什么呢?

原因是,golang的net/http包中已经提供了HTTP的客户端与服务端实现方案。

网上言论都说golang不适合做web开发,相对php、java、.net、nodejs等各类后端语言来说,使用golang来做web开发,确实是一个大工程。

昨晚恰好看到一篇关于使用golang搭建web服务器的文章,心痒难耐,于是自己也折腾了一下,用来练练手。

我是新手上路,照搬文章里的内容,总是磕磕碰碰,每次运行都是找不到路径。代码是这样的:

?

1

2

3

4

5

6

func main() {

 http.Handle("/css/", http.FileServer(http.Dir("template")))

 http.Handle("/js/", http.FileServer(http.Dir("template")))

 http.Handle("/", http.FileServer(http.Dir("template"))) 

 http.ListenAndServe(":8080", nil)

}

目录结构:

?

1

2

3

4

5

6

7

8

9

10

src

|--main

| |-main.go

|--template

| |-css

|  |--admin.css

| |-js

|  |--admin.js

| |-html

|  |--404.html

以上运行结果是:找不到template这个路径。

其实我很纳闷,文章作者都可以成功运行起来这个demo,怎么到我这里,就启动不来了呢?

那么问题来了:

1.是什么原因导致程序起不来呢?
2.http.Dir()指向的是什么路径?

于是我追踪日志,如下

2018/01/07 11:09:28 open template/html/404.html: The system cannot find the path specified.

发现问题是出在找不到路径上。解决了第一个问题后,那么接下来就需要搞明白http.Dir()到底指向的是哪个路径。

我查看了官方例子:

?

1

log.Fatal(http.ListenAndServe(":8080", http.FileServer(http.Dir("/usr/share/doc"))))

从上面例子http.Dir("/usr/share/doc")可看出,该路径指向的是linux系统里的绝对路径。那么问题就解决了:我只需要将http.Dir()的路径改为运行时的相对路径,或者使用绝对路径就可以了。

另一个例子,使用http.StripPrefix()方法:

?

1

2

3

4

// To serve a directory on disk (/tmp) under an alternate URL

// path (/tmpfiles/), use StripPrefix to modify the request

// URL's path before the FileServer sees it:

http.Handle("/tmpfiles/", http.StripPrefix("/tmpfiles/", http.FileServer(http.Dir("/tmp"))))

可看出,tmpfiles是tmp目录下的一个子目录。

既然问题都解决了,那么就修改一下代码,重新运行

?

1

2

3

4

5

6

7

8

9

10

11

func Template_dir() string {

 template_dir := "E:\\project\\gotest\\src\\template"

 return template_dir

}

 

func main() {

 http.Handle("/css/", http.FileServer(http.Dir(Template_dir())))

 http.Handle("/js/", http.FileServer(http.Dir(Template_dir())))

 

 http.ListenAndServe(":8080", nil)

}

编译运行后,在浏览器中输入localhost:8080/css/,可成功看到template/css/目录下的admin.css文件。

golang搭建静态web服务器的实现方法相关推荐

  1. Python搭建静态web服务器

    核心还是使用Python的socket实现的,socket的具体用法前面文章有写,这里不写太多注释. 1.本地搭建python静态web服务器 在资源目录打开命令终端,输入命令:python -m h ...

  2. Node.js「三」—— 创建静态 WEB 服务器

    本文为 Node.js 系列笔记第三篇.文章参考:nodejs 教程:<深入浅出 Node.js>:阮一峰 nodejs 博客: Node.js v16.13.0 文档 文章目录 前言 一 ...

  3. python自带静态web服务器搭建代码实现(一)

    一.静态web服务器 静态web法服务器:可为发出请求的浏览器提供静态文档的程序,平时上网浏览的页面都是动态的,而开发的是静态的,页面数据不会发生变化 搭建python自带的静态web服务器 命令:p ...

  4. nginx搭建静态文件服务器,利用nginx搭建静态资源服务器的方法步骤

    以windows为例,linux其实一样: 搭建静态资源服务器 我电脑上的work文件夹下面有很多图片,我想通过nginx搭建静态资源服务器,通过在地址栏输入ip+port的方式完成目录的映射 找到n ...

  5. 搭建Python自带静态Web服务器

    学习目标 能够知道搭建Python自带Web服务器 1. 静态Web服务器是什么? 可以为发出请求的浏览器提供静态文档的程序. 平时我们浏览百度新闻数据的时候,每天的新闻数据都会发生变化,那访问的这个 ...

  6. 〖Web全栈开发③〗—HTTP协议和静态web服务器

    HTTP协议和静态web服务器 (一)三次握手和四次挥手 (二)HTTP协议 2.1 HTTP协议的定义 2.2 HTTP协议的组成 (三)搭建python自带静态web服务器 3.1 静态web服务 ...

  7. Python基础 3.4 HTTP协议和静态Web服务器

    HTTP协议和静态Web服务器 3.4.1 HTTP协议 1.HTTP协议介绍 全程:超文本传输协议 作用:规定浏览器和web服务器通信的数据格式 HTTP协议是在应用层的协议,基于传输层的TCP传输 ...

  8. Python 高级:05 HTTP 协议和静态 Web 服务器

    一.HTTP 协议 1. HTTP 协议的介绍 HTTP 协议的全称是(Hyper Text Transfer Protocol),翻译过来就是超文本传输协议.超文本就是超级文本的缩写,是指超越文本限 ...

  9. 分享关于搭建高性能WEB服务器的一篇文章

    这篇文章主要介绍了Centos5.4+Nginx-0.8.50+UWSGI-0.9.6.2+Django-1.2.3搭建高性能WEB服务器的相关资料,需要的朋友可以参考下(http://m.0813s ...

最新文章

  1. python3 numpy array_python 3和numpy数组
  2. 小组级git服务器搭建
  3. c 语言与试验系统,C/C++程序设计学习与实验系统
  4. spring框架学习1:搭建测试
  5. word域变成正常文本_超级干货|最全的PPT、Excel、Word实用宝典,助你办公效率翻倍!...
  6. ARKit:增强现实技术在美团到餐业务的实践
  7. 【2016年第6期】SKA数据中心云平台方案的概念性研究
  8. 智能优化算法:细菌觅食优化算法 - 附代码
  9. 机械--NX2007(UG)有限元分析教程2--装配体
  10. Linux终端怎么打开root,在linux终端中执行root命令有哪些方法
  11. Unity 游戏中近战攻击判定检测——射线检测
  12. 这一份Spring源码解析PDF,阿里架构师直言:全网最深度解析!
  13. 两代 2011/2014 Mac Mini 硬盘SSD性能提升研究。(SSD固态硬盘研究)
  14. 【Unity3D】枪战游戏—弹孔设置
  15. [USACO09DEC]视频游戏的麻烦Video Game Troubles(DP)
  16. 电视盒子系统是安卓还是yunOS,三招快速弄清
  17. 真无线蓝牙耳机推荐:2021最受欢迎的TWS耳机品牌
  18. 关于学校闪讯的路由器使用
  19. 弘辽科技:如何将新品打造成爆款?选对方法,教你轻松打造爆款
  20. 读书札记:新西兰元因素

热门文章

  1. php压缩解压缩插件,PHP压缩解压缩类:PclZip
  2. 华为虚拟home键关闭_华为手机音量忽大忽小,不妨打开这3个开关调整,音量变大变清晰...
  3. 怎么解锁blockinput锁定的键盘_电脑键盘上的三个灯分别是什么作用?虽然很简单,但是很实用...
  4. mysql 表与表之间的条件比对_十六年老司机笔记:MySQL性能优化之必备技能
  5. 江西理工大学c语言考试题库,江西理工大学C语言程序设计竞赛(初级组)(示例代码)...
  6. nodejs计算时间间隔_nodejs 如何定时执行一个函数
  7. shell脚本:监控MySQL服务是否正常
  8. 深度优先搜索-和为某数的所有组合
  9. linux源代码剖析之三fs
  10. 5号字对应的数字字号_写好公文的几个数字口诀