Go 示例: HTTP 服务器

使用 net/http 包编写基本的 HTTP 服务器很容易。

package main
import (
    "fmt"
    "net/http"
)

net/http 服务器中的一个基本概念是处理程序。处理程序是实现 http.Handler 接口的对象。编写处理程序的一种常见方法是使用 http.HandlerFunc 适配器在具有适当签名的函数上。

func hello(w http.ResponseWriter, req *http.Request) {

用作处理程序的函数接受 http.ResponseWriterhttp.Request 作为参数。响应写入器用于填充 HTTP 响应。这里我们简单的响应只是“hello\n”。

    fmt.Fprintf(w, "hello\n")
}
func headers(w http.ResponseWriter, req *http.Request) {

此处理程序通过读取所有 HTTP 请求头并将它们回显到响应主体来执行更复杂的操作。

    for name, headers := range req.Header {
        for _, h := range headers {
            fmt.Fprintf(w, "%v: %v\n", name, h)
        }
    }
}
func main() {

我们使用 http.HandleFunc 方便函数在服务器路由上注册我们的处理程序。它在 net/http 包中设置默认路由器,并接受一个函数作为参数。

    http.HandleFunc("/hello", hello)
    http.HandleFunc("/headers", headers)

最后,我们使用端口和处理程序调用 ListenAndServenil 表示使用我们刚刚设置的默认路由器。

    http.ListenAndServe(":8090", nil)
}

在后台运行服务器。

$ go run http-servers.go &

访问 /hello 路由。

$ curl localhost:8090/hello
hello

下一个示例:上下文.