发布于 2026-01-06 8 阅读
0

面向 NodeJS 开发人员的 Golang REST API - 第一部分

面向 NodeJS 开发人员的 Golang REST API - 第一部分

在第一部分,我们将搭建项目的基础架构。首先,请确保已安装 Go 1.13 版本。在 Mac 系统上,我建议使用 Homebrew 来安装。

Go 模块初始化

首先,创建一个文件夹,用于存放此项目的代码。在该文件夹内运行命令,go mod init todo其中 todo 将是项目的名称。在NodeJS中,我们执行npm init.

设置数据库连接

在这个项目中,我们将使用go-pg,因此需要运行 `go install go-pg` 来安装它go get github.com/go-pg/pg。这将安装该库及其所有依赖项。
对于有NodeJS经验的人来说,这相当于 ` go install go-pg` npm install。在项目根目录下创建一个名为 `go-pg` 的文件夹postgres,并在其中创建一个同名文件,并将 `.go` 作为扩展名。

在这个文件中,我们将创建一个名为 New 的函数,它的唯一作用是返回指向数据库实例的指针。

// postgres/postgres.go

package postgres

import (
    "github.com/go-pg/pg/v9"
    _ "github.com/lib/pq"
)

func New(opts *pg.Options) *pg.DB {
    db := pg.Connect(opts)

    return db
}

我喜欢让软件包的根目录与文件夹名称保持一致,这是我个人喜欢遵循的约定,这样可以简化操作。

设置基本处理程序/端点

处理程序(Handler)类似于我们的控制器。应用程序的逻辑将在这里与客户端(在本例中为 REST API)绑定。
我们还会设置中间件并将其绑定到路由器实例。路由方面,我们使用Chi,可以通过安装它go get github.com/go-chi/chi
我发现Chi 是Go 语言Chi中最好的路由库。原因首先是它的外观与我在NodeJS中一直使用的路由库 Express 非常相似 此外,该库遵循标准库的签名。而这正是Go社区所期望的。

// handlers/handlers.go

package handlers

import (
    "time"

    "github.com/go-chi/chi"
    "github.com/go-chi/chi/middleware"
)

type Server struct {

}

func setupMiddleware(r *chi.Mux) {
    r.Use(middleware.RequestID)
    r.Use(middleware.RealIP)
    r.Use(middleware.Compress(6, "application/json"))
    r.Use(middleware.Logger)
    r.Use(middleware.Recoverer)
    r.Use(middleware.URLFormat)
    r.Use(middleware.Timeout(60 * time.Second))
}

func NewServer() *Server {
    return &Server{}
}

func SetupRouter() *chi.Mux {
    server := NewServer()

    r := chi.NewRouter()

    setupMiddleware(r)

    server.setupEndpoints(r)

    return r
}

接下来,我们需要一个基础接口。在本部分(第一部分)中,我们将只实现它的基本框架。

// handlers/endpoint.go

package handlers

import "github.com/go-chi/chi"

func (s *Server) setupEndpoints(r *chi.Mux) {
    r.Route("/api/v1", func(r chi.Router) {
        r.Route("/users", func(r chi.Router) {

        })
    })
}

设置主函数

Go 语言中,所有代码都从 Main 函数开始。因此,在我们的代码中,我们将最终初始化数据库和路由。
我们还要确保路由器运行在指定的端口上。我们会检查环境变量是否提供了相应PORT的变量,否则我们将使用其他方法8081
这相当于NodeJS中的 ` __init__` 方法。

const port = process.env.PORT || 8081;

main.go所以,请在项目根目录创建一个文件,内容应该如下所示。

// main.go

package main

import (
    "fmt"
    "log"
    "net/http"
    "os"

    "github.com/go-pg/pg/v9"

    "todo/handlers"
    "todo/postgres"
)

func main() {
    DB := postgres.New(&pg.Options{
        User:     "postgres",
        Password: "postgres",
        Database: "todo_dev",
    })

    defer DB.Close()

    r := handlers.SetupRouter()

    port := os.Getenv("PORT")
    if port == "" {
        port = "8081"
    }

    err := http.ListenAndServe(fmt.Sprintf(":%s", port), r)
    if err != nil {
        log.Fatalf("cannot start server %v", err)
    }
}

结论

如果你喜欢这篇教程,别忘了订阅我的电子报。视频链接就在文章顶部。
如有任何疑问,欢迎在下方评论区留言。

这部分的代码

祝您编程愉快 :)

这是我博客上的一篇跨平台文章。您可以在这里阅读原文:https://equimper.com/blog/golang-rest-api-for-nodejs-developer-part-1

文章来源:https://dev.to/equimper/golang-rest-api-for-nodejs-developer-part-1-54i0