前面的章节我们讲解了 go web server 相关的知识,我们已经可以对路由进行解析,然后匹配对应的句柄处理路由,实现网站页面的输出。在网站开发过程中静态文件处理也是一个必须的功能,您可以使用 http.Handle 或者 http.HandleFunc 通过静态文件或者静态文件夹解析函数来完成这个功能。
package main
import (
"log"
"net/http"
)
func home(w http.ResponseWriter, r *http.Request) {
html := `<html>
<body>
<img src="static/demo.png" />
<div>hello</div>
</body>
<html>`
w.Write([]byte(html))
}
func staticFunc(w http.ResponseWriter, r *http.Request) {
http.ServeFile(w, r, "./favicon.ico")
}
func main() {
// 首页路由
http.HandleFunc("/", home)
// 静态文件夹解析
// StripPrefix将URL中的前缀中的prefix字符串删除,
// 然后再交给后面的Handler处理,一般是http.FileServer()的返回值。
// 如果URL不是以prefix开始,或者prefix包含转移字符,最后结果都会返回404,因此要精确匹配URL和prefix
// http.FileServer 函数返回一个Handler,
// 这个 Handler 向h ttp request 提供文件系统内容,一般使用http.Dir(“yourFilePath”)
http.Handle(
"/static/",
http.StripPrefix("/static/", http.FileServer(http.Dir("./static"))),
)
// 单独解析一个静态文件示例
// favicon.ico 文件
http.HandleFunc("/favicon.ico", staticFunc)
err := http.ListenAndServe(":800", nil) //设置监听的端口
if err != nil {
log.Fatal("ListenAndServe: ", err)
}
}