使用 Go 创建项目

帅气猫咪 · · 1568 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

简介

这可能是接下来一系列的文章的开始.

使用 Gin 创建一个 web 项目.

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

通过学习掘金小册, 并加上自己的实践, 完成一个完整的 Go Web 项目.

创建一个项目

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

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

因为这个项目不会发布到其他地方, 也不会作为依赖被使用, 所以 模块路径 是随意选择的.

添加对 Gin 的依赖.

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, 主要分为两步.

第一步运行了 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

资瓷一下

虽然不是我写的, 大家都能优惠, 也支持一下原作者.

掘金小册


有疑问加站长微信联系(非本文作者)

本文来自:掘金

感谢作者:帅气猫咪

查看原文:使用 Go 创建项目

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

1568 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传