golang快速构建应用程序脚手架工具插件nunu的使用
Golang快速构建应用程序脚手架工具插件Nunu的使用
Nunu是一个用于构建Go应用程序的脚手架工具。它的名字来源于英雄联盟游戏中的一个角色,一个骑在雪人肩膀上的小男孩。就像Nunu一样,这个项目站在巨人的肩膀上,因为它建立在Go生态系统中流行库的组合之上。这个组合可以让你快速构建高效可靠的应用程序。
特性
Nunu包含以下流行库:
- Gin: 高性能HTTP框架
- Gorm: ORM库
- Wire: Google的依赖注入工具
- Viper: 配置管理
- Zap: 高性能日志库
- Golang-jwt: JWT实现
- Go-redis: Redis客户端
- Testify: 测试工具
- Sonyflake: 分布式ID生成
- Gocron: 任务调度
- Go-sqlmock: SQL模拟
- Gomock: 接口模拟
- Swaggo: Swagger文档生成
- Casbin: 权限控制
- Pitaya: 游戏服务器框架
- MCP-GO: 微服务框架
安装
要使用Nunu,你需要在系统上安装以下软件:
- Go 1.19或更高版本
- Git
- Docker (可选)
- MySQL 5.7或更高版本 (可选)
- Redis (可选)
安装Nunu:
go install github.com/go-nunu/nunu@latest
提示:如果
go install
成功但nunu
命令无法识别,可能是因为环境变量未配置。你可以将GOBIN目录添加到环境变量中。
创建新项目
创建一个新的Go项目:
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
创建组件
你可以为项目创建handler、service、repository和model:
nunu create handler user
nunu create service user
nunu create repository user
nunu create model user
或者一次性创建所有组件:
nunu create all user
运行项目
快速运行项目:
nunu run
这个命令会启动你的Go项目,并在文件更新时支持热重载。
编译wire.go
快速编译wire.go
:
nunu wire
这个命令会编译你的wire.go
文件并生成所需的依赖项。
项目结构
.
├── api
│ └── v1
├── cmd
│ ├── migration
│ ├── server
│ │ ├── wire
│ │ │ ├── wire.go
│ │ │ └── wire_gen.go
│ │ └── main.go
│ └── task
├── config
├── deploy
├── docs
├── internal
│ ├── handler
│ ├── middleware
│ ├── model
│ ├── repository
│ ├── server
│ └── service
├── pkg
├── scripts
├── test
│ ├── mocks
│ └── server
├── web
├── Makefile
├── go.mod
└── go.sum
示例代码
以下是一个简单的handler示例:
// internal/handler/user.go
package handler
import (
"net/http"
"github.com/gin-gonic/gin"
"github.com/go-nunu/nunu-example/internal/service"
)
type UserHandler struct {
*Handler
userService service.UserService
}
func NewUserHandler(handler *Handler, userService service.UserService) *UserHandler {
return &UserHandler{
Handler: handler,
userService: userService,
}
}
func (h *UserHandler) GetUser(ctx *gin.Context) {
userId := ctx.Param("id")
if userId == "" {
ctx.JSON(http.StatusBadRequest, gin.H{
"error": "user id is required",
})
return
}
user, err := h.userService.GetUserById(ctx, userId)
if err != nil {
ctx.JSON(http.StatusInternalServerError, gin.H{
"error": err.Error(),
})
return
}
ctx.JSON(http.StatusOK, user)
}
对应的service示例:
// internal/service/user.go
package service
import (
"context"
"github.com/go-nunu/nunu-example/internal/model"
"github.com/go-nunu/nunu-example/internal/repository"
)
type UserService interface {
GetUserById(ctx context.Context, id string) (*model.User, error)
}
type userService struct {
userRepo repository.UserRepository
}
func NewUserService(userRepo repository.UserRepository) UserService {
return &userService{
userRepo: userRepo,
}
}
func (s *userService) GetUserById(ctx context.Context, id string) (*model.User, error) {
return s.userRepo.GetById(ctx, id)
}
总结
Nunu是一个功能强大的Go应用程序脚手架工具,它集成了许多流行的Go库,可以帮助开发者快速构建高效、可靠的应用程序。通过简单的命令行工具,你可以轻松创建项目结构、生成组件代码,并快速启动开发服务器。
更多关于golang快速构建应用程序脚手架工具插件nunu的使用的实战教程也可以访问 https://www.itying.com/category-94-b0.html
更多关于golang快速构建应用程序脚手架工具插件nunu的使用的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
使用Nunu快速构建Golang应用程序脚手架
Nunu是一个优秀的Golang应用程序脚手架工具,它可以帮助开发者快速初始化项目结构、集成常用组件并自动化生成代码。下面我将详细介绍Nunu的使用方法。
Nunu简介
Nunu的主要特点包括:
- 快速生成项目基础结构
- 集成常用组件(如Gin、GORM、Zap等)
- 支持模块化开发
- 提供代码生成工具
- 内置Docker支持
安装Nunu
首先需要安装Nunu工具:
go install github.com/go-nunu/nunu@latest
或者使用brew安装(macOS):
brew tap go-nunu/nunu
brew install nunu
创建新项目
使用以下命令创建新项目:
nunu new myproject
cd myproject
这会在当前目录下创建一个名为myproject
的Golang项目,包含以下基本结构:
myproject/
├── cmd/
├── config/
├── internal/
├── pkg/
├── scripts/
├── .gitignore
├── go.mod
├── LICENSE
├── Makefile
└── README.md
项目结构说明
cmd/
: 包含应用程序的入口文件config/
: 配置文件internal/
: 核心业务逻辑代码pkg/
: 可复用的公共组件scripts/
: 构建和部署脚本
添加模块
Nunu支持模块化开发,可以使用以下命令添加新模块:
nunu add module user
这会生成一个用户模块的基本结构:
internal/
└── user/
├── handler/
├── model/
├── repository/
├── service/
└── user.go
代码生成
Nunu提供了代码生成工具,可以快速生成CRUD代码:
nunu generate handler user
nunu generate service user
nunu generate repository user
集成常用组件
Nunu项目默认集成了以下常用组件:
- Web框架:Gin
- ORM:GORM
- 日志:Zap
- 配置管理:Viper
- 依赖注入:Wire
示例代码
以下是一个使用Nunu创建的简单API示例:
// internal/user/handler/user_handler.go
package handler
import (
"net/http"
"github.com/gin-gonic/gin"
"myproject/internal/user/service"
)
type UserHandler struct {
userService *service.UserService
}
func NewUserHandler(userService *service.UserService) *UserHandler {
return &UserHandler{
userService: userService,
}
}
func (h *UserHandler) GetUser(c *gin.Context) {
id := c.Param("id")
user, err := h.userService.GetUserById(id)
if err != nil {
c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
return
}
c.JSON(http.StatusOK, user)
}
// cmd/server/main.go
package main
import (
"myproject/internal/user/handler"
"myproject/internal/user/repository"
"myproject/internal/user/service"
"github.com/gin-gonic/gin"
"gorm.io/gorm"
)
func main() {
// 初始化数据库连接等配置
// db := initDB()
// 初始化依赖
userRepo := repository.NewUserRepository(db)
userService := service.NewUserService(userRepo)
userHandler := handler.NewUserHandler(userService)
// 创建Gin路由
r := gin.Default()
r.GET("/users/:id", userHandler.GetUser)
// 启动服务
r.Run(":8080")
}
构建和运行
Nunu项目提供了Makefile,可以使用以下命令:
# 构建项目
make build
# 运行项目
make run
# 清理构建
make clean
# 运行测试
make test
优势总结
- 快速启动:几分钟内即可搭建一个结构良好的项目
- 最佳实践:遵循Golang项目组织的最佳实践
- 可扩展性:模块化设计便于扩展
- 生产就绪:集成了日志、配置管理等生产环境需要的组件
Nunu特别适合需要快速开发API服务或微服务的场景,它提供的脚手架可以节省大量初始化项目的时间,让开发者专注于业务逻辑的实现。