Handle-HTTP 服务
开始
通过这个例子你可以在 GO 中创建一个 HTTP 服务,首先,这将告诉你 HTTP 服务将包含哪些功能。一个基础 HTTP 服务将有一些职责要处理。
处理动态请求:处理当用户浏览网页产生的请求,记录他们的账号或者上传的图片。
静态资源服务: 创建一个服务动态接收用户浏览产生的 JavaScript, CSS 和 images 请求。
接收连接: 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 参数(来自于表单中的一个字段)
静态服务
通过 静态服务资源接收像JavaScript, CSS 和 images,我们使用内置 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)
}