Where is the filesystem "root" of a Go net/http
webserver. It doesn't seem to be in the directory the executable is in.
By "root" I mean the directory I would use for, say, the src
attribute of an img
, without any path. I don't plan to do this, but it would help me understand the structure if I knew.
使用Go的网络服务器,网站的根目录在哪里映射到文件系统?
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
1条回答 默认 最新
- dou29106 2015-02-26 14:41关注
Introduction
In Go the
net/http
package is used to provide Web Server functionality. This is not a static fileserver, it is much more than that.There is no filesystem "root" concept. The provided web server uses handlers to serve HTTP requests which are mapped to URLs. A handler is responsible to process an HTTP request and to setup and generate the response. A handler can be registered e.g. with the
Handle()
orHandleFunc()
functions. The server can be started with theListenAndServe()
function.Read the package documentation of
net/http
to understand the basic concepts and to get started. It also contains many small examples.The Blog article Writing Web Applications is also helpful.
Static File Server
However, a static file server or "filesystem" functionality is provided, there is a
FileServer()
function in thehttp
package which returns aHandler
which serves static files. You can specify the "root" folder to serve static files from as a parameter ofFileServer()
.If you pass an absolute path to
FileServer()
, then there is no question what that means. If you provide a relative path, it is always interpreted in the context of the current or working directory. By default this is the folder you start the application from (the folder you're in when executing thego run ...
command or the compiled executable binary).Example:
http.Handle("/", http.FileServer(http.Dir("/tmp")))
This will setup a handler to serve files from the folder
/tmp
mapped to the root URL/
. For example the response to the GET request"/mydoc.txt"
will be the"/tmp/mydoc.txt"
static file.Complete application:
package main import ( "log" "net/http" ) func main() { // Simple static webserver: http.Handle("/", http.FileServer(http.Dir("/tmp"))) log.Fatal(http.ListenAndServe(":8080", nil)) }
You can do more complex mapping using the
StripPrefix()
function. Example:// 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"))))
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥15 微信小程序协议怎么写
- ¥15 c语言怎么用printf(“\b \b”)与getch()实现黑框里写入与删除?
- ¥20 怎么用dlib库的算法识别小麦病虫害
- ¥15 华为ensp模拟器中S5700交换机在配置过程中老是反复重启
- ¥15 java写代码遇到问题,求帮助
- ¥15 uniapp uview http 如何实现统一的请求异常信息提示?
- ¥15 有了解d3和topogram.js库的吗?有偿请教
- ¥100 任意维数的K均值聚类
- ¥15 stamps做sbas-insar,时序沉降图怎么画
- ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看