从零开始学习 Go Web 开发

2025-05-26

从零开始学习 Go Web 开发

大家好,我是 Sam Zhang。

今天我想探索一下后端开发领域——所以我选择了 Go。我选择 Go 而不是其他语言(比如 Java)的主要原因是 Go 是一种比较新的语言(至少在我看来是这样)。

遗憾的是,我之前完全没有 Go 开发经验。所以我开始写这一系列博客,以便跟踪自己的进度。我会尝试“记录”我所做的事情,并在文章中写下一些主要概念。

当然,因为我还是个 Go 初学者(或者说新手?),所以这里可能有一些不正确的地方。如果有的话,请给我留言,帮助我改进!

那我们就開始吧!

安装 Go

与许多其他语言不同,安装 Go 非常简单,至少对我来说是这样。

继续在Go 下载页面下载官方安装程序。运行它,然后一切就绪!

Go 默认自带命令行工具go。它包含一系列命令,例如rungetmod等等。当然,我会在本系列文章中多次使用这些命令。完整的命令列表请点击此处

安装 Gin

我 Google 了一下哪个 Go Web 框架最适合初学者,但结果并没有什么帮助。不过,很多人提到了Gin ,它在GitHub上已经有近 6 万颗星。所以我选择了 Gin 作为我的入门框架。

创建一个新文件夹来包含您的项目并按照安装说明进行操作。

故障排除

如果您和我一样是个初学者,那么在运行时您可能会遇到以下问题go get

$ go get -u github.com/gin-gonic/gin
go: go.mod file not found in current directory or any parent directory.
        'go get' is no longer supported outside a module.
        To build and install a command, use 'go install' with a version,
        like 'go install example.com/cmd@latest'
        For more information, see https://golang.org/doc/go-get-install-deprecation
        or run 'go help get' or 'go help install'.
Enter fullscreen mode Exit fullscreen mode

这意味着您当前文件夹中没有创建模块。go mod是一个用于管理 Go 模块的命令。我们将使用go mod init该命令来生成一个新模块。

go mod init命令接受一个参数module-path。我现在不太确定这个参数的含义,我将其理解为模块的名称。module-path的格式应如下:

lorem/ipsum/dor
Enter fullscreen mode Exit fullscreen mode

然后运行go mod init <module-path>​​,并将 替换<module-path>为你自己的模块路径。之后,你应该能够gin-gonic正确安装。

编写第一个 Gin 请求

现在我们已经设置好了环境。让我们用 Go 编写一个简单的“Hello World”请求。

在根文件夹下新建一个文件,命名为,main.go并填写如下代码:

package main

import (
    "net/http"

    "github.com/gin-gonic/gin"
)

func main() {
    router := gin.Default()  // router with default middleware installed
    // index route
    router.GET("/", func(c *gin.Context) {
        c.JSON(http.StatusOK, gin.H{
            "message": "Hello World",
        })
    })
    // run the server
    router.Run()
}
Enter fullscreen mode Exit fullscreen mode

然后运行go run main.go并打开http://localhost:8080。希望能够正常显示 Hello World:

{
    "message": "Hello World"
}
Enter fullscreen mode Exit fullscreen mode

理解 Hello World 代码

那么……这到底是怎么回事?我们来看看代码。

我们已经声明了包main,并导入了一些有用的包到代码中。我会尽力逐行解释main()函数中的代码。

因此,在第 10 行,我们声明了一个名为 的变量routergin.Default它返回一个附加了默认中间件(例如 Logger 和 Recovery 中间件)的路由器。你可能会好奇, 到底是什么:=?其实,它和其他编程语言中的类似=。在 Golang 中,=表示赋值表示声明赋值:=例如:

var router = gin.Default()
Enter fullscreen mode Exit fullscreen mode

相当于:

router := gin.Default()
Enter fullscreen mode Exit fullscreen mode

:=运算符称为“短变量声明”。更多信息请参阅此 StackOverflow 问题

在第 12 到 16 行,我们定义了一个 GET 请求,映射到 ,/并返回 JSON 响应。router.GET()当然, 定义了一个 GET 请求。它的第二个参数接受一个可调用函数,而该函数将接收一个类型为 的参数gin.Context

在这种情况下,上下文变量名为c*gin.Context它是指向值的指针gin.Context。Gin 中的上下文提供了许多功能,例如中间件和响应。对于中文读者,您可以阅读这篇文章,以更深入地了解gin.Context

在第 13 行,我们调用c.JSON()来响应此请求,其内容的 MIME 类型为application/jsonhttp.StatusOK是 HTTP 状态代码的常量变量200 success,来自内置包net/http

gin.H是定义 JSON 数据类型的简化版本。如果你想在 JSON 对象中嵌套 JSON 对象,可以这样写:

gin.H{
    "some-data": gin.H{
        "message": "success"
    }
}
Enter fullscreen mode Exit fullscreen mode

最后在第 18 行,我们在默认端口 8080 上运行服务器。

实时重新加载

现在,如果您想更改 Go 应用程序的内容,则需要在每次更改内容时重新启动开发服务器,以便测试新添加的代码。

一些 Web 框架(例如 Python Flask)为开发服务器内置了热重载器。遗憾的是,Gin 没有内置此功能。我选择使用air作为自动重载器,当然你也可以使用其他框架。

设置 Air 非常简单。运行以下命令即可安装:

curl -sSfL https://raw.githubusercontent.com/cosmtrek/air/master/install.sh | sh -s -- -b $(go env GOPATH)/bin
Enter fullscreen mode Exit fullscreen mode

这会将 Air 安装到你的$GOPATH,默认是。然后通过在你的(或)中添加以下行将~/go其附加到你的$PATH.bashrc.zshrc

export PATH=$PATH:$(go env GOPATH)/bin
Enter fullscreen mode Exit fullscreen mode

...一切就绪!运行air init即可生成默认 Air 配置。

使用 Air 更加简单。只需air在命令行中运行,Air 就会main.go在当前文件夹中运行,并自动监视源代码中的更改。

给 macOS 用户的提示:如果您不想在 Air 每次重新加载代码时看到烦人的弹出窗口,只需替换

router.Run()
Enter fullscreen mode Exit fullscreen mode


router.Run("localhost:8080")
Enter fullscreen mode Exit fullscreen mode

结论

所以……我终于完成了 Gin 的 hello world!我把所有源代码都放到了GitHub上,希望以后能更新。如果你觉得有用,或者只是想试试,可以 Clone 一下!

我是 Sam Zhang,下次再见!

文章来源:https://dev.to/samzhangjy/learning-go-web-development-from-zero-a1l
PREV
React Js 路线图 - 2022
NEXT
让你的代码更简洁、更短小、更易读!ES6 技巧和窍门。