HTTP 服务器

嗨,我是 Philipp!
我想告诉你,我的平台Go Web 示例课程刚刚推出。享受有关 Go 中 Web 开发的易于遵循的视频课程。务必查看我为早期支持者提供的特别优惠。
我们会在那里见到你! :)
了解更多信息

简介

在本示例中,你将学习如何在 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)
}