📅  最后修改于: 2023-12-03 15:01:00.191000             🧑  作者: Mango
本文将介绍如何使用 Go 编程语言创建简单的 HTTP 服务器示例。我们将使用 Go 标准库中的 net/http 包来构建我们的服务器,并使用 Logrus 作为日志库。我们将演示如何处理 GET 和 POST 请求、如何返回 JSON 数据和处理请求时发生的错误。
在开始编写代码之前,我们需要为我们的项目安装两个依赖:net/http 和 logrus。打开终端并输入以下命令:
go get github.com/sirupsen/logrus
我们将创建一个名为 main.go
的文件作为我们的入口点。首先,我们必须导入所需的所有依赖项:
package main
import (
"encoding/json"
"net/http"
"github.com/sirupsen/logrus"
)
接下来,我们将创建一个函数 healthHandler()
,它将处理我们服务器的 /health 路由:
func healthHandler(w http.ResponseWriter, r *http.Request) {
w.WriteHeader(http.StatusOK)
w.Write([]byte("OK"))
}
这个函数非常简单——它只是返回了一个带有 HTTP 200 状态码和 OK 文本的响应。
接下来,我们将创建一个 User
结构体,它将表示我们的用户对象:
type User struct {
Name string `json:"name"`
Email string `json:"email"`
}
现在,我们将创建一个将返回 JSON 数据的函数 userHandler()
,该函数将处理我们服务器的 /user 路由:
func userHandler(w http.ResponseWriter, r *http.Request) {
u := User{
Name: "Alice",
Email: "alice@example.com",
}
w.Header().Set("Content-Type", "application/json")
w.WriteHeader(http.StatusOK)
if err := json.NewEncoder(w).Encode(u); err != nil {
logrus.WithError(err).Error("failed to encode user")
}
}
在这个函数中,我们创建了一个 User
对象,并将其编码为 JSON 格式,然后将其写入 HTTP 响应流中。
我们还需要创建一个将处理我们的 POST 请求的函数 postHandler()
:
func postHandler(w http.ResponseWriter, r *http.Request) {
if r.Method == http.MethodPost {
// handle POST request
} else {
w.WriteHeader(http.StatusMethodNotAllowed)
}
}
这个函数会检查 HTTP 请求的方法是否为 POST。如果是,它就会处理 POST 请求;否则,它会返回 405 Method Not Allowed 响应。
最后,我们将创建一个 main()
函数,它将使用 Go 标准库中的 http.ListenAndServe()
函数将我们的服务器绑定到指定端口:
func main() {
http.HandleFunc("/health", healthHandler)
http.HandleFunc("/user", userHandler)
http.HandleFunc("/post", postHandler)
logrus.Info("starting server on port 8080")
if err := http.ListenAndServe(":8080", nil); err != nil {
logrus.WithError(err).Fatal("failed to start server")
}
}
在这个函数中,我们使用 http.HandleFunc()
函数将我们的请求路由注册到我们的服务器中,并在正常运行时打印一条日志。
我们现在可以在终端中运行我们的代码了:
go run main.go
我们可以使用 curl
命令测试我们的服务器:
curl http://localhost:8080/health
curl http://localhost:8080/user
我们可以在我们的终端中看到服务器的日志输出。
在本例中,我们使用 Go 标准库中的 net/http
包和第三方库 logrus
来构建了一个简单的 HTTP 服务器示例。我们学习了如何处理 GET 和 POST 请求、如何返回 JSON 数据和如何处理请求时发生的错误。