Go 语言工程实践课后作业 | 青训营

103 阅读2分钟

本文将介绍 Go 语言工程实践课后作业的实现思路、代码以及路径记录,帮助读者学习 Go 语言的实践应用。

  1. 题目描述

本次课后作业的题目为:实现一个简单的 HTTP 服务器,能够处理 GET 请求并返回指定文件的内容。

  1. 实现思路

为了实现这个简单的 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 错误页面。

  1. 代码实现

综合以上实现思路,可以得到完整的代码实现:

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)
}
  1. 路径记录

为了方便读者理解和学习代码实现,本文提供了一些路径记录: