前言
这个示例将展示如何在Go中创建基本的HTTP服务器。一个基本的HTTP服务器需要处理几个关键的任务:
- 处理动态请求:处理来自浏览网站、登录帐户或发布图片的用户的请求。
- 提供静态资源:为浏览器提供JavaScript、CSS和图像,为用户创建动态体验。
- 接受连接:HTTP服务器必须监听一个特定的端口,以便能够接受来自internet的连接。
处理动态请求
net/http包包含接受请求和动态处理请求所需的所有工具。可以用http.HandleFunc函数注册一个新的处理程序。第一个参数接受要匹配的路径,第二个参数为要执行的函数。在下面这个例子中:当某人浏览网站(http://example.com/)时,他或她将收到一个欢迎的消息。
http.HandleFunc("/", func (w http.ResponseWriter, r *http.Request) {
fmt.Fprint(w, "Welcome to my website!")
})
http.Request包含关于请求及其参数的所有信息。可以t通过r.URL.Query(). GET(“token”)读取GET参数,或者通过r.FormValue(“email”)读取POST参数。
提供静态资源
为了提供JavaScript、CSS和图像等静态资源,可以使用内建函数http.FileServer,其参数指向一个url路径。文件服务器需要知道从哪里提供文件,方法如下:
fs := http.FileServer(http.Dir("static/"))
文件服务器就绪后,只需将url路径指向它,就像处理动态请求时所做的那样。需要注意的一点是:为了正确地提供文件,需要删除url路径中文件所在目录的名称。
http.Handle("/static/", http.StripPrefix("/static/", fs))
接受连接
完成基本的HTTP服务器的最后一步是,监听端口以接受来自internet的连接。Golang有一个内置的HTTP服务器,可以快速启动。启动后,可以在浏览器中查看HTTP服务器。
代码
package main
import (
"fmt"
"net/http"
)
func main() {
http.HandleFunc("/", func (w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "Welcome to my website!")
})
fs := http.FileServer(http.Dir("static/"))
http.Handle("/static/", http.StripPrefix("/static/", fs))
http.ListenAndServe(":80", nil)
}
有疑问加站长微信联系(非本文作者)