使用 Go 建立项目

简介

这多是接下来一系列的文章的开始.git

使用 Gin 建立一个 web 项目.github

主要参考的是掘金小册里的 基于 Go 语言构建企业级的 RESTful API 服务.web

经过学习掘金小册, 并加上本身的实践, 完成一个完整的 Go Web 项目.api

建立一个项目

新建一个项目, 并使用 go mod 初始化.跨域

go mod init tzh.com/web
复制代码

由于这个项目不会发布到其余地方, 也不会做为依赖被使用, 因此 模块路径 是随意选择的.安全

添加对 Gin 的依赖.bash

go get -u github.com/gin-gonic/gin
复制代码

启动一个简单的服务器

第一部分是建立一个简单的服务器, 主文件以下:服务器

package main

import (
	"log"
	"net/http"

	"github.com/gin-gonic/gin"
	"tzh.com/web/handler/check"
	"tzh.com/web/router"
)

func main() {
	// 初始化空的服务器
	app := gin.New()
	// 保存中间件
	middlewares := []gin.HandlerFunc{}

	// 路由
	router.Load(
		app,
		middlewares...,
	)

	go func() {
		if err := check.PingServer(); err != nil {
			log.Fatal("服务器没有响应", err)
		}
		log.Printf("服务器正常启动")
	}()

	log.Printf("启动服务器在 http address: %s", ":8080")
	log.Printf(http.ListenAndServe(":8080", app).Error())
}

复制代码

初始化了 Gin, 主要分为两步.app

第一步运行了 router.Load 函数, 里面初始化了一些中间件, 以及一些检查类的 API.框架

第二步经过一个 goroutine 检查了服务器是否启动成功, 其实我以为这里能够加一个循环, 定时检查服务器状态.

当前定义的中间件, 主要是设置 Headers 的, 这个就要熟不熟悉常见的 Headers, 这部分我不太熟悉, 之前主要是靠框架自动设置的.

Options 仍是知道的, 添加跨域支持. 但对安全设置middleware.Secure(), 真的是没有研究.

// 载入中间件
func Load(g *gin.Engine, mw ...gin.HandlerFunc) *gin.Engine {
	g.Use(gin.Logger())
	g.Use(gin.Recovery())
	g.Use(middleware.NoCache())
	g.Use(middleware.Options())
	g.Use(middleware.Secure())
	g.Use(mw...)

	g.NoRoute(func(ctx *gin.Context) {
		ctx.String(http.StatusNotFound, "incorrect api router")
	})

	checkRoute := g.Group("/check")
	{
		checkRoute.GET("/health", check.HealthCheck)
		checkRoute.GET("/disk", check.DiskCheck)
		checkRoute.GET("/cpu", check.CPUCheck)
		checkRoute.GET("/memory", check.MemoryCheck)
	}

	return g

}
复制代码

接着设置了对 404 的响应.

gin.Group 是个好东西, 用于建立必要前缀, 或者分组都颇有用, 官方文档里的例子演示了如何用做 api 版本的区分.

这里组织了一些检查服务器状态的 API, 主要使用 gopsutil 模块获取.

当前的内容就分析到这里, 代码见下面.

一点感觉

差很少是第一次写一个完整的 Go 项目, 不得不说, 折腾编辑器就折腾很久了.

一开始老是有不少的不习惯和陌生, 仍是要多多接触.

Go 的模块如今还不是很成熟, gopls 的提示也不是很完美, 感受脱离了编辑器就不会写代码了.

当前部分的代码

做为版本 0.1.0

资瓷一下

虽然不是我写的, 你们都能优惠, 也支持一下原做者.

掘金小册
相关文章
相关标签/搜索