虽然直接使用go-gin等框架也很简单,但是涉及数据库、jwt认证、配置文件和日志记录等全套的服务,一个个集成进来也挺费事。关键是一个个集成,很难做到结构清晰和分层合理。这里推荐一个好用的脚手架Nunu,太好用啦,可以让你把精力直接放在业务上直接开干。
Nunu介绍
Nunu 是一个基于 Golang 的应用脚手架,它的名字来自于英雄联盟中的游戏角色,一个骑在雪怪肩膀上的小男孩。和努努一样,该项目也是站在巨人的肩膀上,它是由 Golang 生态中各种非常流行的库整合而成的,它们的组合可以帮助你快速构建一个高效、可靠的应用程序。
项目主页:https://github.com/go-nunu/nunu
功能特色
Nunu 采用了多种常用且非常流行的库,包括 Gin、Gorm、Wire、Viper、Zap、Golang-jwt、Go-redis、Testify、Sonyflake、robfig-cron 等等。这些库涵盖了http服务、数据库访问、配置文件、日志记录、认证鉴权等常用组件。他们的组合可以帮助你快速构建一个高效、可靠的应用程序。
分层架构
Nunu 采用了经典的分层架构。同时,为了更好地实现模块化和解耦,采用了依赖注入框架 Wire。
特性
Nunu 具有以下特性:
- 超低学习成本和定制:Nunu 封装了 Gopher 最熟悉的一些流行库。你可以轻松定制应用程序以满足特定需求。
- 高性能和可扩展性:Nunu 旨在具有高性能和可扩展性。它使用最新的技术和最佳实践,确保你的应用程序可以处理高流量和大量数据。
- 安全可靠:Nunu 使用了稳定可靠的第三方库,确保你的应用程序安全可靠。
- 模块化和可扩展:Nunu 旨在具有模块化和可扩展性。你可以通过使用第三方库或编写自己的模块轻松添加新功能和功能。
- 文档完善和测试完备:Nunu 文档完善,测试完备。它提供了全面的文档和示例,帮助你快速入门。它还包括一套测试套件,确保你的应用程序按预期工作。
- 简洁分层架构:Nunu 采用了经典的分层架构。同时,为了更好地实现模块化和解耦,采用了依赖注入框架 Wire。
文档
Nunu 提供了全面的文档和示例,帮助你快速入门。它还包括一套测试套件,确保你的应用程序按预期工作。
nunu/docs/zh/guide.md at main · go-nunu/nunu · GitHub
要求
要使用 Nunu,你需要在系统上安装以下软件:
- Golang 1.16 或更高版本
- Git
- MySQL 5.7 或更高版本(可选)
- Redis(可选)
安装
你可以通过一行命令安装 Nunu:
go install github.com/go-nunu/nunu@latest
linux下把nunu命令加入环境变量:
vi ~/.bashrc
bashrc文件末尾增加并保存
export PATH=$PATH:/root/go/bin
让环境变量生效:
source ~/.bashrc
简单使用
创建新项目
您可以使用以下命令创建一个新的Golang项目:
nunu new projectName
默认拉取github源,你也可以使用国内加速仓库
// 使用基础模板
nunu new projectName -r https://gitee.com/go-nunu/nunu-layout-basic.git
// 使用高级模板
nunu new projectName -r https://gitee.com/go-nunu/nunu-layout-advanced.git
目录介绍
.
├── cmd
│ ├── job
│ ├── migration
│ └── server
│ ├── wire
│ │ ├── wire.go
│ │ └── wire_gen.go
│ └── main.go
├── config
│ ├── local.yml
│ └── prod.yml
├── deploy
├── internal
│ ├── dao
│ │ ├── dao.go
│ │ └── user.go
│ ├── handler
│ │ ├── handler.go
│ │ └── user.go
│ ├── job
│ │ └── job.go
│ ├── middleware
│ │ ├── cors.go
│ │ ├── jwt.go
│ │ ├── log.go
│ │ └── sign.go
│ ├── migration
│ │ └── migration.go
│ ├── model
│ │ └── user.go
│ ├── provider
│ │ └── provider.go
│ ├── server
│ │ └── http.go
│ └── service
│ ├── service.go
│ └── user.go
├── pkg
│ ├── config
│ ├── helper
│ ├── http
│ └── log
├── script
├── storage
├── test
├── web
├── LICENSE
├── README.md
├── README_zh.md
├── go.mod
└── go.sum
这是一个经典的Golang 项目的目录结构,包含以下目录:
cmd
:存放命令行应用的代码,例如main.go
。config
:存放配置文件,例如config.yaml
。-
internal
:存放项目内部的代码,不对外暴露。dao
:存放数据访问对象(Data Access Object)的代码。handler
:存放 HTTP 请求处理器的代码。middleware
:存放 HTTP 中间件的代码。model
:存放数据模型的代码。provider
:存放依赖注入的代码。server
:存放 HTTP 服务器以及路由注册的代码。service
:存放业务逻辑的代码。
-
pkg
:存放可重用的代码,对外暴露。config
:存放读取配置文件的代码。helper
:存放辅助函数的代码。http
:存放 HTTP 相关的代码。log
:存放日志相关的代码。
创建组件
你可以使用以下命令为项目创建 handler、service 和 dao 等组件:
nunu create handler user
nunu create service user
nunu create dao user
nunu create model user
这些命令将分别创建一个名为 UserHandler
、UserService
、UserDao
和 UserModel
的组件,并将它们放置在正确的目录中。
启动项目
你可以使用以下命令快速启动项目:
nunu run
此命令将启动你的 Golang 项目,并支持文件更新热重启。
编译 wire.go
wire是Go官方推出的一款类似于Spring依赖注入工具。有别于以往的依赖注入工具facebookgo/inject、uber-go/dig等,采用反射实现。wire采用通过代码描述对象之间的依赖关系,然后自动生成代码在编译期实现依赖注入的工具 源码:https://github.com/google/wire
什么是依赖注入
说到依赖注入(Dependency Injection,缩写DI),不得不提控制反转(Inversion of Control,缩写为IoC)。IoC是一种设计思想,核心作用是降低代码耦合度。 传统系统应用是在类内部主动引用对象,从而导致类与类之间高度耦合,不利于维护,而有了IoC容器后,把创建和查找对象工作交给容器,由容器动态的将某个依赖关系注入对象中,控制权由调用者应用代码转移到IoC容器,控制权发生了反转,从而实现对象间解耦。依赖注入是实现IoC解决依赖问题的设计模式。
你可以使用以下命令快速编译 wire.go
:
nunu wire
此命令将编译你的 wire.go
文件,并生成所需的依赖项。
书籍推荐
首页关注博主公众号《猫青年》,回复“书籍”,获取更多高清电子书资源!完全免费!
其他资源
nunu/docs/zh/guide.md at main · go-nunu/nunu · GitHub
Nunu: 助你快速构建高效可靠的Go应用_出于随性的博客-CSDN博客
框架 - Nunu: 助你快速构建高效可靠的Go应用 - 个人文章 - SegmentFault 思否
go-nunu: Nunu是一个基于Golang的应用脚手架