栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Go语言

Go 后端快速开发脚手架

Go语言 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Go 后端快速开发脚手架

Github项目地址: go-starter

go-starter 小型项目快速开发脚手架

为了快速开发验证最小 MVP,我整合了我们常用go第三方库集成、诸如 echo 、swag 、viper 、nsq 、logrus 、fx 、xorm 、cobra 等,为了快速进入业务开发,模板式开发。


集成的第三方库与技术
  • Github Actions
  • 自定义Logger logrus
  • CLI命令 cobra
  • 配置读取器 viper
  • Web框架 echo
  • 依赖注入 fx
  • ORM xorm
  • Swagger generator swag echo-swagger
  • Messaging NSQ
  • golangci-lint golangci-lint
  • Migrate migrate
  • …

项目代码结构分层
   - app        # 主程序入口
     - cmd
     - ... 
   - config       # 配置相关
   - deploy       # ci/cd相关, 镜像相关
     - mysql      # mysql docker-compose
     - nsq        # nsq docker-compose
     - ...        # 其他部署相关     
   - docs         # swag 生成的 swagger2.0 文档目录
   - internal     # 核心业务逻辑
     - controller # http handler(controller层)
     - http       # http sever 启动入口
     - lib        # 核心基础
     - models     # 模型
     - nsq        # nsq producer 和 nsq consumer 启动入口与业务
     - repository # repository 层
     - service    # service层
   - utils        # 工具通用(工具方法、常量、通用错误定义)
     - ... 
   - ...

构建发布依赖 swag 生成最新的Swagger文档
> swag init -g app/main.go

产生的swagger地址为 http://{IP}:{PORT}/swagger/index.html

构建和发布镜像
  • 本地
    > cd .
    > docker build . --file deploy/Dockerfile --tag {ImageTag}
    
  • github action

    在CI内部已经做了自动化构建和发布镜像( github 当前项目下secrets配置的 { secrets.ACCESS_USERNAME } 的值是 docker hub 用户名)

BE初始化和启动部署
  1. 创建docker自定义网络go_starter_network
    > docker network create go_starter_network
    
  2. mysql启动 与 nsq启动
    # MYSQL 启动
    > cd deploy/mysql
    > docker-compose up -d
    # NSQ 启动
    > cd deploy/nsq
    > docker-compose up -d
    
  3. BE后端服务启动
    # go-starter 启动
    > cd deploy
    > docker-compose up -d
    
  4. 访问健康坚持接口
    http://{IP}:{PORT}/
    

其他文件相关描述
  • Dockerfile – Docker镜像分为两阶段构建, Builder阶段 与 打包阶段。

      # Builder阶段构建二进制可执行文件
      FROM golang:1.16.1-alpine3.13 as builder
      ......
      RUN CGO_ENABLED=0 GOOS=linux go build -o go_starter app/main.go
      
      # 打包阶段
      FROM alpine
      ......
      # 从构建阶段COPY生成的可执行文件
      COPY --from=builder /app/go_starter /app
      # ......
    
  • Uber 依赖框架 fx. fx 开发包详细说明

    //上面的代码不写了
    ......
    
    var (
        httpCmd = &cobra.Command{
            Use:   "http",
            Short: "Start Http REST API",
            Run:   initHTTP,
        }
    )
    
    func initHTTP(cmd *cobra.Command, args []string) {
        fx.New(inject()).Run()
    }
    
    // 注意前后依赖关系,顺序启动。
    func inject() fx.Option {
        return fx.Options(
            fx.Provide(
                config.NewConfig,
                utils.NewTimeoutContext,
            ),
            libs.XormModule,
            repository.Module,
            service.Module,
            controller.Module,
            nsq.ProducerModule,
            nsq.ConsumerModule,
            http.Module,
        )
    }
    
    
  • swag 说明
    doc 目录下为自动生成的,不需要更改,需要更改的化话需要更高主要上面的注释

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/944606.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号