Golang 基于Gin框架搭建的完整脚手架

在这里插入图片描述

Golang基于Gin框架封装的web脚手架以及常用组件 github

gin框架
# 安装gin
go get -u github.com/gin-gonic/gin

简单的案例:

package main

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

func main() {
    //Default返回一个默认的路由引擎
    // 也可以自行创建 gin.New()
    r := gin.Default()
    r.GET("/index", func(c *gin.Context) {
        / 以json格式输出response
        c.JSON(200, gin.H{
            "message": "index",
        })
    })
    r.Run(":8888") // listen port 8888
}

上面的代码可以直接:

go run main.go            # 之后浏览器访问:localhost:8888 

这是最简单的使用,几行代码就可以完成一个简单的web服务器.

更多的内容可以查看gin的中文文档:

目录结构
  • 然而我们在实际使用中尝尝需要各种各样的组件,以及封装各种各样的常用工具函数,及其麻烦,所以在这里我对常用的组件、工具函数进行了封装,开箱即用;

  • 详细的目录结构

   ├─apps                       程序入口
   ├─common                     常用的项目公共代码
   │  ├─error                   项目全局错误信息
   │  ├─global                  项目全局参数
   │  ├─logger                  项目日志
   │  └─response                项目统一响应
   ├─config                     项目配置
   ├─deploy                     项目部署文件
   ├─http_server                业务处理
   │  ├─controllers             控制层
   │  ├─manager                 实际处理业务层
   │  ├─models                  数据库模型
   │  └─routes                  服务路由
   ├─internal                   项目服务核心组件
   │  ├─db                      数据库组件
   │  ├─elasticsearch           es组件相关实现
   │  ├─grpc                    grpc相关案例
   │  ├─kafka                   kafka消息队列组件
   │  ├─redis                   redis组件
   │  └─sessions                session实现
   ├─middlewares                中间件
   ├─proto                      proto文件存放目录
   └─utils                      常用工具函数

 request -> apps -> router -> controller -> manager -> controller -> response

在使用的过程中我们不需要在关注细枝末节的信息,可以更加专注于业务的开发,其中业务的处理主要放在了http_server

routes
gin_server.go

// 该目录主要封装路由相关方法
package routes

import (
	"context"
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
	"os"
	"os/signal"
	"time"

	"github.com/gin-gonic/gin"
	"github.com/scliang-strive/webServerTools/config"
	middleware "github.com/scliang-strive/webServerTools/middlewares"
)

// 封装路由
func InitApiRouter() {
	var router *gin.Engine
	if config.GetConfig().Debug {
		gin.DefaultWriter = ioutil.Discard
		router = gin.New()
		// 载入gin的中间件,关键是第二个中间件,我们对它进行了自定义重写,将可能的 panic 异常等
		router.Use(middleware.CustomRecovery())
	} else {
		gin.SetMode(gin.ReleaseMode)
		router = gin.Default()
	}
	// 常用的中间件,查看定义的中间价在middlewares文件夹中
	router.Use(middleware.LoggerMiddleware())
	router.Static("../static", "./static")
	// 处理路由组 router.go
	ApiRouter(router)
	runHttpServer(router)
}

// runHttpServer 自定义http配置
func runHttpServer(router *gin.Engine) {
	srv := &http.Server{
		Addr:    fmt.Sprintf(":%d", config.GetConfig().WebConfig.Port),
		Handler: router,
	}

	go func() {
		if err := srv.ListenAndServe(); err != nil && err != http.ErrServerClosed {
			log.Fatalf("listen: %s\n", err)
		}
	}()

	quit := make(chan os.Signal)
	signal.Notify(quit, os.Interrupt)
	<-quit
	log.Println("Shutdown Server ...")

	ctx, cancel := context.WithTimeout(context.Background(), 3*time.Second)
	defer cancel()
	if err := srv.Shutdown(ctx); err != nil {
		log.Fatal("Server Shutdown:", err)
	}
	log.Println("Server exiting")
}

router.go

package routes

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

func ApiRouter(router *gin.Engine) {
	// 对路由进行分组,处理不同的分组,根据自己的需求定义即可
	server := router.Group("")
	serverRouter(server)
}

func serverRouter(group *gin.RouterGroup) {

}

models
定义数据模型

controller
访问控制层

manager
实际业务处理层

-------------文中有许多借鉴于别人的blog进行集成的的地方,不足之处可以留言添加-------------------
-------------文中有许多借鉴于别人的blog进行集成的的地方,不足之处可以留言添加-------------------
-------------文中有许多借鉴于别人的blog进行集成的的地方,不足之处可以留言添加-------------------
  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值