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)
}