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

1 回复

更多关于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项目默认集成了以下常用组件:

  1. Web框架:Gin
  2. ORM:GORM
  3. 日志:Zap
  4. 配置管理:Viper
  5. 依赖注入: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

优势总结

  1. 快速启动:几分钟内即可搭建一个结构良好的项目
  2. 最佳实践:遵循Golang项目组织的最佳实践
  3. 可扩展性:模块化设计便于扩展
  4. 生产就绪:集成了日志、配置管理等生产环境需要的组件

Nunu特别适合需要快速开发API服务或微服务的场景,它提供的脚手架可以节省大量初始化项目的时间,让开发者专注于业务逻辑的实现。

回到顶部