» Go:使用Kafka构建事件驱动微服务 » 2. 生产者:Web 服务 » 2.2 Gin Web 服务器

Gin Web 服务器

创建模块

执行 go mod init 命令,指定模块路径。

go mod init literank.com/event-books

其结果:

go: creating new go.mod: module literank.com/event-books
go: to add module requirements and sums:
        go mod tidy

该命令会创建一个 go.mod 文件,其用于追踪管理项目依赖。

安装依赖框架

安装 Gin 框架:

go get -u github.com/gin-gonic/gin

该命令会更新 go.mod 文件并在项目中自动创建一个 go.sum 文件。

创建模板目录

创建一个名为 templates 的目录,将 index.html 移进去。

调整页面标题:

- <h1 class="text-4xl font-bold">LiteRank Book Store</h1>
+ <h1 class="text-4xl font-bold">{{ .title }}</h1>

{{ .title }} 是 Go HTML 模板包使用的模板语法。 Gin 内部使用了该模板包,所以在渲染 HTML 模板时也沿用了该语法。

创建 main.go:

package main

import (
	"net/http"

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

func main() {
	// 创建一个新的 Gin 路由设置器 router
	router := gin.Default()

	// 从目录中载入 HTML 模板
	router.LoadHTMLGlob("templates/*.html")

	// 定义主页的路由
	router.GET("/", func(c *gin.Context) {
		// 渲染 HTML 模板文件 "index.html"
		c.HTML(http.StatusOK, "index.html", gin.H{
			"title": "LiteRank Book Store",
		})
	})

	// 运行服务器,默认端口 8080
	router.Run()
}

如下运行程序:

go run main.go

将得到类似如下信息:

[GIN-debug] [WARNING] Creating an Engine instance with the Logger and Recovery middleware already attached.

[GIN-debug] [WARNING] Running in "debug" mode. Switch to "release" mode in production.
 - using env:   export GIN_MODE=release
 - using code:  gin.SetMode(gin.ReleaseMode)

[GIN-debug] Loaded HTML Templates (2): 
        - 
        - index.html

[GIN-debug] GET    /                         --> main.main.func1 (3 handlers)
[GIN-debug] [WARNING] You trusted all proxies, this is NOT safe. We recommend you to set a value.
Please check https://pkg.go.dev/github.com/gin-gonic/gin#readme-don-t-trust-all-proxies for details.
[GIN-debug] Environment variable PORT is undefined. Using port :8080 by default
[GIN-debug] Listening and serving HTTP on :8080

你的 web 服务器已经在 8080 端口跑起来了。

尝试在浏览器中访问 http://localhost:8080/ 。它应该展示一个如之前章节设计的网页给你。