Nunu
是一个基于 Golang 的应用脚手架,它的名字来自于英雄联盟中的游戏角色,一个骑在雪怪肩膀上的小男孩。和努努一样,该项目也是站在巨人的肩膀上。
它是由 Golang 生态中各种非常流行的库整合而成的,它们的组合可以帮助你快速构建一个高效、可靠的应用程序,包括如下所示的一些库:Gin、Gorm、Wire、Viper、Zap、Golang-jwt、Go-redis、Testify、Sonyflake、Gocron、Go-sqlmock、Gomock 等。
特性
Nunu
不仅仅是一个脚手架,它还包含了一些最佳实践和设计模式,可以帮助你快速构建一个高效、可靠的应用程序。具有以下一些特性:
-
超低学习成本和定制:Nunu 封装了 Gopher 最熟悉的一些流行库。您可以轻松定制应用程序以满足特定需求。 -
高性能和可扩展性:Nunu 旨在具有高性能和可扩展性。它使用最新的技术和最佳实践,确保您的应用程序可以处理高流量和大量数据。 -
安全可靠:Nunu 使用了稳定可靠的第三方库,确保您的应用程序安全可靠。 -
模块化和可扩展:Nunu 旨在具有模块化和可扩展性。您可以通过使用第三方库或编写自己的模块轻松添加新功能和功能。 -
文档完善和测试完备:Nunu 文档完善,测试完备。它提供了全面的文档和示例,帮助您快速入门。它还包括一套测试套件,确保您的应用程序按预期工作。
使用
Nunu
采用了经典的分层架构,同时,为了更好地实现模块化和解耦,采用了依赖注入框架 Wire
,如下图所示:
要使用 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
命令来查看帮助信息,可用的命令包括:create
、new
、run
、upgrade
、wire
等,如所示:
$ 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
命令为项目创建 handler
、service
、repository
和 model
等组件:
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.go
和wire_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