Go网络编程-HTTP Server
跳到导航
跳到搜索
简介
在这个例子中,你将学习如何在Go中创建一个简单的HTTP服务器。首先,让我们谈谈我们的HTTP服务器应该能够做什么。一个基本的HTTP服务器有几个关键任务需要处理。
- 处理动态请求:处理来自浏览网站、登录账户或发布图片的用户的传入请求。
- 提供静态资源:向浏览器提供JavaScript、CSS和图片,为用户创造动态体验。
- 接受连接: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)
}