📌  相关文章
📜  go http 服务器示例 - Go 编程语言(1)

📅  最后修改于: 2023-12-03 15:01:00.191000             🧑  作者: Mango

Go HTTP 服务器示例

本文将介绍如何使用 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 数据和如何处理请求时发生的错误。