一个非常好用的构建 Golang 应用脚手架 – Nunu

Nunu 是一个基于 Golang 的应用脚手架,它的名字来自于英雄联盟中的游戏角色,一个骑在雪怪肩膀上的小男孩。和努努一样,该项目也是站在巨人的肩膀上。

一个非常好用的构建 Golang 应用脚手架 - Nunu

它是由 Golang 生态中各种非常流行的库整合而成的,它们的组合可以帮助你快速构建一个高效、可靠的应用程序,包括如下所示的一些库:GinGormWireViperZapGolang-jwtGo-redisTestifySonyflakeGocronGo-sqlmockGomock 等。

特性

Nunu 不仅仅是一个脚手架,它还包含了一些最佳实践和设计模式,可以帮助你快速构建一个高效、可靠的应用程序。具有以下一些特性:

  • 超低学习成本和定制:Nunu 封装了 Gopher 最熟悉的一些流行库。您可以轻松定制应用程序以满足特定需求。
  • 高性能和可扩展性:Nunu 旨在具有高性能和可扩展性。它使用最新的技术和最佳实践,确保您的应用程序可以处理高流量和大量数据。
  • 安全可靠:Nunu 使用了稳定可靠的第三方库,确保您的应用程序安全可靠。
  • 模块化和可扩展:Nunu 旨在具有模块化和可扩展性。您可以通过使用第三方库或编写自己的模块轻松添加新功能和功能。
  • 文档完善和测试完备:Nunu 文档完善,测试完备。它提供了全面的文档和示例,帮助您快速入门。它还包括一套测试套件,确保您的应用程序按预期工作。

使用

Nunu 采用了经典的分层架构,同时,为了更好地实现模块化和解耦,采用了依赖注入框架 Wire,如下图所示:

一个非常好用的构建 Golang 应用脚手架 - Nunu
Nunu Layout

要使用 Nunu,需要提前在系统上安装以下软件:

  • Golang 1.16 或更高版本
  • Git
  • MySQL5.7 或更高版本(可选)
  • Redis(可选)

安装

要安装 Nunu 也是非常简的,直接使用 go install 命令即可安装:

$ go: downloading github.com/go-nunu/nunu v1.0.5
go: downloading github.com/AlecAivazis/survey/v2 v2.3.6
go: downloading golang.org/x/term v0.0.0-20210503060354-a79de5458b56
go: downloading github.com/mattn/go-colorable v0.1.2
go: downloading github.com/mattn/go-isatty v0.0.8

如果 go install 成功,却提示找不到 nunu 命令,这是因为环境变量没有配置,可以把 GOBIN 目录配置到环境变量中即可。

安装完成后我们可以通过执行 nunu -h 命令来查看帮助信息,可用的命令包括:createnewrunupgradewire 等,如所示:

$ nunu -h

 _   _
|  | |_   _ _ __  _   _
|  | | | | | '_ | | | |
| |  | |_| | | | | |_| |
|_| _|__,_|_| |_|__,_|

A CLI tool for building go aplication.

Usage:
  nunu [command]

Examples:
nunu new demo-api

Available Commands:
  completion  Generate the autocompletion script for the specified shell
  create      Create a new handler/service/repository/model
  help        Help about any command
  new         create a new project.
  run         nunu run [main.go path]
  upgrade     Upgrade the nunu command.
  wire        nunu wire [wire.go path]

Flags:
  -h, --help      help for nunu
  -v, --version   version for nunu

Use "nunu [command] --help" for more information about a command.

然后我们就可以使用 nunu new 命令来创建一个新的 Golang 项目:

nunu new projectName

该命令将创建一个名为 projectName 的目录,并在其中生成一个优雅的 Golang 项目结构。

此外我们还可以使用 nunu create 命令为项目创建 handlerservicerepositorymodel 等组件:

nunu create handler user
nunu create service user
nunu create repository user
nunu create model user

当然我们还可以直接使用 create all 命令来一次性创建所有组件:

nunu create all user

项目创建完成后我们可以使用 nunu run 命令来快速启动项目:

nunu run

该命令将启动你的 Golang 项目,并支持文件更新热重启。

此外我们还可以使用以下命令快速编译 wire.go

nunu wire

此命令将编译您的 wire.go 文件,并生成所需的依赖项。

目录结构

通过 Nunu 脚手架创建的项目目录结构如下所示:

.
├── cmd
│   ├── job
│   │   ├── main.go
│   │   ├── wire.go
│   │   └── wire_gen.go
│   ├── migration
│   │   ├── main.go
│   │   ├── wire.go
│   │   └── wire_gen.go
│   └── server
│       ├── main.go
│       ├── wire.go
│       └── wire_gen.go
├── config
│   ├── local.yml
│   └── prod.yml
├── deploy
├── internal
│   ├── handler
│   │   ├── handler.go
│   │   └── user.go
│   ├── job
│   │   └── job.go
│   ├── middleware
│   ├── migration
│   │   └── migration.go
│   ├── model
│   │   └── user.go
│   ├── repository
│   │   ├── repository.go
│   │   └── user.go
│   ├── server
│   │   └── http.go
│   └── service
│       ├── service.go
│       └── user.go
├── mocks
│   ├── repository
│   │   └── user.go
│   └── service
│       └── user.go
├── pkg
├── scripts
├── storage
├── test
│   └── server
│       ├── handler
│       │   └── user_test.go
│       ├── repository
│       │   └── user_test.go
│       └── service
│           └── user_test.go
├── web
│   └── index.html
├── LICENSE
├── Makefile
├── README.md
├── README_zh.md
├── coverage.html
├── go.mod
└── go.sum

该脚手架生成的项目架构采用了典型的分层架构,主要包括以下几个模块:

  • cmd:该模块包含了应用的入口点,根据不同的命令进行不同的操作,例如启动服务器、执行数据库迁移等。每个子模块都有一个main.go文件作为入口文件,以及wire.gowire_gen.go文件用于依赖注入。
  • config:该模块包含了应用的配置文件,根据不同的环境(如开发环境和生产环境)提供不同的配置。
  • deploy:该模块用于部署应用,包含了一些部署脚本和配置文件。
  • internal:该模块是应用的核心模块,包含了各种业务逻辑的实现。
    • handler:该子模块包含了处理 HTTP 请求的处理器,负责接收请求并调用相应的服务进行处理。
    • job:该子模块包含了后台任务的逻辑实现。
    • middleware:该子模块包含了中间件的实现,用于处理请求的前置和后置操作。
    • migration:该子模块包含了数据库迁移的逻辑实现。
    • model:该子模块包含了数据模型的定义。
    • repository:该子模块包含了数据访问层的实现,负责与数据库进行交互。
    • server:该子模块包含了 HTTP 服务器的实现。
    • service:该子模块包含了业务逻辑的实现,负责处理具体的业务操作。
  • mocks:该模块包含了各个模块的接口的模拟实现,用于单元测试。
  • pkg:该模块包含了一些通用的功能和工具。
  • scripts:该模块包含了一些脚本文件,用于项目的构建、测试和部署等操作。
  • storage:该模块用于存储文件或其他静态资源。
  • test:该模块包含了各个模块的单元测试,按照模块划分子目录。
  • web:该模块包含了前端相关的文件,如 HTML、CSS 和 JavaScript 等。

此外,还包含了一些其他的文件和目录,如授权文件、构建文件、README 等。整体上,该项目的架构清晰,各个模块之间的职责明确,便于理解和维护。

Github 仓库:https://github.com/go-nunu/nunu

原文始发于微信公众号(Github爱好者):一个非常好用的构建 Golang 应用脚手架 – Nunu

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/201042.html

(0)
Java光头强的头像Java光头强

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!