GoNuNu框架丨青训营笔记

184 阅读5分钟

探索Nunu:基于Golang的应用脚手架(增强版)

简介

Nunu,一个灵感来源于英雄联盟中骑在雪怪肩膀上的小男孩的游戏角色,是一个基于Golang的应用脚手架。它整合了Golang生态中流行的库,帮助你快速构建高效、可靠的应用程序。

核心特性

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

快速开始

安装Nunu

你可以通过以下命令安装Nunu:

go install github.com/go-nunu/nunu@latest

国内用户可以使用GOPROXY加速go install

go env -w GO111MODULE=on
go env -w GOPROXY=https://goproxy.cn,direct

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

创建新项目

Nunu内置了两种类型的Layout:基础模板(Basic Layout)和高级模板(Advanced Layout)。基础模板包含一个非常精简的架构目录结构,适合非常熟悉Nunu项目的开发者使用。高级模板包含了很多Nunu的用法示例(db、redis、jwt、cron、migration等),适合开发者快速学习了解Nunu的架构思想。

使用以下命令创建一个新的Golang项目:

nunu new projectName

或者使用国内加速源:

nunu new projectName -r https://gitee.com/go-nunu/nunu-layout-advanced.git

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

启动服务

创建好项目之后,执行以下命令启动服务:

nunu run cmd/server/main.go

随后打开浏览器访问http://localhost:8080即可看到欢迎页面。API文档地址为http://127.0.0.1:8000/swagger/index.html

命令行工具

Nunu的命令行工具可以协助快速开发Golang项目,通过nunu命令行工具,你可以很容易的进行Golang项目的创建、热编译、开发、测试和部署。

创建组件

nunu create [type] [handler-name]

详细命令如下:

  • 创建Handler:nunu create handler [handler-name]
  • 创建Service:nunu create service [service-name]
  • 创建Repository:nunu create repository [repository-name]
  • 创建Model:nunu create model [model-name]

如果你觉得每种组件单独创建太麻烦,你可以使用nunu create all创建所有组件。

编译wire

如果你的项目存在多个wire.go文件,而你只想编译指定的wire.go文件,你可以使用nunu wire,然后自己选择对应的文件编译。

详解Wire的用法:

Wire是一个依赖注入工具,用于Go语言,它帮助我们减少代码中的硬编码依赖,使得代码更加模块化和可测试。在Nunu框架中,Wire用于实现模块间的依赖注入,以提高项目的可维护性和可扩展性。

安装Wire

在使用Nunu时,Wire通常已经作为依赖被包含在内。如果需要单独安装Wire,可以使用以下命令:

go get github.com/google/wire

使用Wire

在Nunu项目中,Wire的使用主要集中在cmd模块下的wire子目录中的wire.go文件里。以下是Wire在Nunu中的一些基本用法:

  1. 定义Provider Sets:在Wire中,你需要定义一系列的provider sets,这些sets包含了创建你所需依赖的函数。例如:
var serviceSet = wire.NewSet(
    service.NewService,
    service.NewUserService,
)

var repositorySet = wire.NewSet(
    repository.NewDB,
    repository.NewRedis,
    repository.NewRepository,
    repository.NewUserRepository,
)

var serverSet = wire.NewSet(
    server.NewHTTPServer,
    server.NewJob,
    server.NewTask,
)
  1. 构建函数:你需要一个构建函数,它使用wire.Build来组装所有的provider sets,并返回你的应用程序需要的依赖。例如:
func NewWire(*viper.Viper, *log.Logger) (*app.App, func(), error) {
    panic(wire.Build(
        repositorySet,
        serviceSet,
        handlerSet,
        serverSet,
        sid.NewSid,
        jwt.NewJwt,
        newApp,
    ))
}
  1. 编译Wire文件:在Nunu项目中,你可以通过执行以下命令来编译wire.go文件:
nunu wire

这个命令会编译wire.go文件,并生成所需的依赖项。

进阶用法

  • 部分注入:Wire支持部分注入,这意味着你可以只注入一个结构体的部分依赖,而不是全部。这在你想要重用一些依赖或者有特定配置需求时非常有用。
  • 命名Provider:Wire允许你给provider命名,这样你就可以在wire.Build中明确指定使用哪个provider,这在有多个相同类型的provider时非常有用。

总结

Wire是一个强大的依赖注入工具,它通过减少硬编码的依赖关系,使得代码更加清晰和易于测试。在Nunu框架中,Wire的使用简化了组件间的依赖管理,使得项目结构更加合理,代码更加模块化。通过上述的基本用法和进阶用法,你可以更好地理解和运用Wire,以构建更加健壮的Go应用程序。

版本升级

Nunu也支持版本升级,以确保你的项目使用的是最新版本的依赖。

结论

Nunu是一个强大的Golang应用脚手架,它通过整合流行库和提供清晰的架构指导,帮助你快速构建应用程序。无论是新手还是经验丰富的开发者,Nunu都能提供高效的开发体验和强大的功能支持。