在本示例中,你将学习如何在 Go 中创建基本 HTTP 服务器。首先,让我们讨论一下我们的 HTTP 服务器应该具备哪些功能。基本 HTTP 服务器有几个关键任务需要处理。
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
包含有关请求及其参数的所有信息。你可以使用 r.URL.Query().Get("token")
读取 GET 参数,或使用 r.FormValue("email")
读取 POST 参数(HTML 表单中的字段)。
要提供 JavaScript、CSS 和图片等静态资产,我们使用内置的 http.FileServer
并将其指向 URL 路径。为了让文件服务器正常工作,它需要知道从哪里提供文件。我们可以这样做
fs := http.FileServer(http.Dir("static/"))
一旦我们的文件服务器就位,我们只需要像处理动态请求一样为其指定一个 URL 路径。需要注意的一点是:为了正确提供文件,我们需要去掉 URL 路径的一部分。通常这是我们文件所在的目录的名称。
http.Handle("/static/", http.StripPrefix("/static/", fs))
完成我们基本 HTTP 服务器的最后一件事是,侦听端口以接受来自互联网的连接。正如你所料,Go 也有一个内置的 HTTP 服务器,我们可以很快地启动。启动后,你可以在浏览器中查看你的 HTTP 服务器。
http.ListenAndServe(":80", nil)
这是你可以用来尝试在本示例中学习到的内容的完整代码。
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)
}