Go Web 示例: HTTP 服务器

简介

这个例子中,你将学习如何在 Go 中创建一个基本的 HTTP 服务器。 首先,让我们谈谈我们的 HTTP 服务器应该具备什么能力。 一个基本的 HTTP 服务器有几个关键的工作需要处理。

处理动态请求:处理来自浏览网站、登录其帐户或发布图像的用户的传入请求。 提供静态资产:向浏览器提供 JavaScript、CSS 和图像,为用户创造动态体验。 接受连接:HTTP 服务器必须侦听特定端口才能接受来自 Internet 的连接。

处理动态请求

net/http 包包含接受请求并动态处理它们所需的所有实用程序。 我们可以使用 http.HandleFunc 函数注册一个新的处理程序。 它的第一个参数需要一个匹配的路径和一个作为第二个执行的函数。 在这个例子中:当有人浏览你的网站 (http://example.com/) 时,他或她会收到一条好消息。

1
2
3
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 路径。 为了使文件服务器正常工作,它需要知道从哪里提供文件。 我们可以这样做:

1
fs := http.FileServer(http.Dir("static/"))

一旦我们的文件服务器就位,我们只需要指向它的 url 路径,就像我们对动态请求所做的那样。 需要注意的一件事:为了正确提供文件,我们需要剥离一部分 url 路径。 通常这是我们的文件所在目录的名称。

1
http.Handle("/static/", http.StripPrefix("/static/", fs))

接受连接

完成基本 HTTP 服务器的最后一件事是监听端口以接受来自 Internet 的连接。 你可以猜到,Go 也有一个内置的 HTTP 服务器,我们可以快速启动失败。 启动后,您可以在浏览器中查看您的 HTTP 服务器。

示例代码

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
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)
}

本文翻译自:https://gowebexamples.com/http-server/

updatedupdated2021-06-102021-06-10
Load Comments?