» Go:使用ElasticSearch构建全文检索API » 2. 索引文档 » 2.1 Gin Sever

Gin Server

创建模块

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

go mod init literank.com/fulltext-books

其结果:

go: creating new go.mod: module literank.com/fulltext-books

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

安装依赖框架

安装 Gin 框架:

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

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

创建 main.go:

package main

import (
	"net/http"

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

func main() {
	// Create a new Gin router
	router := gin.Default()

	// Define a route for the homepage
	router.GET("/", func(c *gin.Context) {
		c.JSON(http.StatusOK, gin.H{
			"status": "ok",
		})
	})

	// Run the server, default port is 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] 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

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

尝试使用 curl 命令测试 http://localhost:8080/ URL。它应该展示如下 json:

{
  "status": "ok"
}

数据模型:Book

数据模型表示 API 处理的数据的结构。

创建 domain/model/book.go:

形如 domain/model/... 目录结构的项目都是在使用4层架构,详情可阅读这里

package model

type Book struct {
	Title       string `json:"title"`
	Author      string `json:"author"`
	PublishedAt string `json:"published_at"`
	Content     string `json:"content"`
}
上页下页