本文将介绍 Go 语言工程实践课后作业的实现思路、代码以及路径记录,帮助读者学习 Go 语言的实践应用。
- 题目描述
本次课后作业的题目为:实现一个简单的 HTTP 服务器,能够处理 GET 请求并返回指定文件的内容。
- 实现思路
为了实现这个简单的 HTTP 服务器,我们需要采取以下步骤:
2.1 创建 HTTP 服务器
首先,我们需要创建一个 HTTP 服务器,可以使用 Go 语言标准库中的 net/http 包来实现。可以使用 http.NewServeMux() 创建一个 ServeMux 对象,然后使用 http.HandleFunc() 或 ServeMux.HandleFunc() 方法来注册路由处理函数。例如:
mux := http.NewServeMux()
mux.HandleFunc("/", handleIndex)
2.2 处理 GET 请求
接下来,我们需要处理 GET 请求,并返回指定文件的内容。可以使用 http.FileServer() 方法来处理静态文件,它会自动处理 HTTP 请求并返回文件内容。例如:
http.Handle("/", http.FileServer(http.Dir(".")))
其中,http.Dir() 方法用于创建一个文件系统的根目录,. 表示使用当前目录作为根目录。
2.3 处理指定文件
如果需要处理指定文件,可以在路由处理函数中判断请求的 URL 是否为指定文件的路径,如果是,则读取文件内容并返回。例如:
func handleIndex(w http.ResponseWriter, r *http.Request) {
if r.URL.Path == "/index.html" {
data, err := ioutil.ReadFile("index.html")
if err != nil {
http.Error(w, "file not found", http.StatusNotFound)
return
}
w.Write(data)
return
}
http.NotFound(w, r)
}
其中,ioutil.ReadFile() 方法用于读取指定文件的内容,http.NotFound() 方法用于返回 404 错误页面。
- 代码实现
综合以上实现思路,可以得到完整的代码实现:
package main
import (
"io/ioutil"
"net/http"
)
func main() {
mux := http.NewServeMux()
mux.HandleFunc("/", handleIndex)
http.ListenAndServe(":8080", mux)
}
func handleIndex(w http.ResponseWriter, r *http.Request) {
if r.Method == "GET" && r.URL.Path == "/index.html" {
data, err := ioutil.ReadFile("index.html")
if err != nil {
http.Error(w, "file not found", http.StatusNotFound)
return
}
w.Write(data)
return
}
http.NotFound(w, r)
}
- 路径记录
为了方便读者理解和学习代码实现,本文提供了一些路径记录:
net/http包文档:golang.org/pkg/net/htt…http.NewServeMux()方法:golang.org/pkg/net/htt…http.HandleFunc()方法:golang.org/pkg/net/htt…http.ServeMux.HandleFunc()方法:golang.org/pkg/net/htt…http.FileServer()方法:golang.org/pkg/net/htt…http.Dir()方法:golang.org/pkg/net/htt…ioutil.ReadFile()方法:golang.org/pkg/io/iout…http.Error()方法:golang.org/pkg/net/htt…http.NotFound()方法:golang.org/pkg/net/htt…