
Gone是什么
首先,Gone是Golang的一个轻量级的依赖注入框架,目前依赖注入的装配流程是通过反射来实现的;虽然golang的反射一直被人诟病太慢,但是在Gone中依赖注入只是程序的启动阶段,不影响运行阶段的速度,最多就是给启动过程增加几毫秒的时间,带来的好处却是不再需关心各种依赖如何创建。
其次,为了方便用户能够快速上手,我们开发了一系列内置组件,比如 xorm、redis、schedule、tracer、logrus、gin、cmux、zap、viper 等等,后续我们还会支持更多微服务中间件的接入;用户可以利用这些组件快速开发出一个云原生的微服务,所以Gone一套微服务解决方案。
特性
- 定义Goner接口,对依赖进行抽象
- 依赖注入
- 注入Goners
- 注入函数参数
- 模块化,可拆卸设计
- 启动流程控制
- 测试支持
- 内置组件
- goner/config,支持配置参数的依赖注入
- goner/tracer,给调用链路增加TraceId,支持链路追踪
- goner/logrus、goner/zap,支持日志记录
- goner/gin,集成gin框架,提供HTTP请求参数的依赖注入
- goner/viper,用于解析多种配置文件
- …
小试牛刀
下面使用Gone来编写一个简单的Web服务,更多例子在快速开始 和 example。
package main
import (
"fmt"
"github.com/gone-io/gone"
"github.com/gone-io/gone/goner"
)
// 实现一个Goner,什么是Goner? => https://goner.fun/zh/guide/core-concept.html#goner-%E9%80%9D%E8%80%85
type controller struct {
gone.Flag //goner 标记,匿名嵌入后,一个结构体就实现了Goner
gone.RouteGroup `gone:"gone-gin-router"` //注入根路由
}
// 实现 Mount 方法,挂载路由;框架会自动执行该方法
func (ctr *controller) Mount() gone.GinMountError {
// 定义请求结构体
type Req struct {
Msg