Golang提供静态文件,请解释这3行代码
问题描述:
我去学习网络编程和了解寄托都发生了什么,但我在这3个看似简单的线条迷路:Golang提供静态文件,请解释这3行代码
fs := http.FileServer(http.Dir("public"))
handler := http.StripPrefix("/static/", fs)
mux.Handle("/static/", handler)
.. 。我已经阅读了去SRC以下行,这就是我可以推断:
-
http.Dir("public")
是铸造字符串“公众”,键入目录。 - 然后我们为一个文件(包括其所有内容)http.FileServer()
- 我们剥去前缀,因为现在我们是handleFunc()内为FS
- StripPrefix()创建的HandlerFunc()
- mux.Handle()在多路复用器中注册HandlerFunc()。
- 深进了兔子洞......然后这个够程
go c.serve(ctx)
通过func (srv *Server) Serve(l net.Listener) error {}
- 所以里面
/public/
DIR每个静态文件是由我们的服务器同时提供服务。
有人可以确认或解释3行代码中究竟发生了什么。
答
确认:
您正在注册静态文件的自动处理程序。将通过发送/public
目录中的文件同时处理形式为GET /static/some_file
的请求。
答
望着我觉得文档后,这是发生了什么:
http.Dir("public")
要转换的string
"public"
到根据docs它实现了FileSystem
接口
fs := http.FileServer(http.Dir("public"))
类型Dir
做:
FileServer返回一个处理程序,该处理程序以root用户身份提供文件系统的 内容的HTTP请求。
root
作为Dir
要传递作为参数
handler := http.StripPrefix("/static/", fs)
您包装在由StripPrefix
FUNC创建的Handler
的Handler
fs
其中根据docs确实:
StripPref九返回除去 从请求的URL路径给定的前缀和调用处理程序 ^ h
h
是用于HTTP请求处理程序Handler
fs
你作为参数传递
mux.Handle("/static/", handler)
你让所有以/static/
开头的请求都由handler
处理
因此总之所有请求的路径为/static/
将删除/static/
前缀,并将从您的服务器上的public
目录返回具有相同名称的文件,例如。 /static/requestedFile.txt
的请求将返回该文件根据public/requestedFile.txt