Skip to content
/ gone Public

Gone is a lightweight dependency injection framework for Golang, designed to integrate with a variety of third-party components, enabling rapid development of cloud-native micro services.

License

Notifications You must be signed in to change notification settings

gone-io/gone

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

English  |  中文

license GoDoc Go Report Card codecov Build and Test Release Mentioned in Awesome Go

logo

Gone

Gone 是基于Golang标签的依赖注入框架

Gone 是一个轻量级的golang依赖注入框架,下面是一个简单的例子(嵌入了gone.Flag的结构体,我们称之为Goner):

package main

import "github.com/gone-io/gone/v2"

type Dep struct {
	gone.Flag
	Name string
}

type Component struct {
	gone.Flag
	dep *Dep        `gone:"*"` //依赖注入
	log gone.Logger `gone:"*"`
}

func (c *Component) Init() {
	c.log.Infof(c.dep.Name) //使用依赖
}

func main() {
	gone.
		NewApp().
		// 组件注册加载
		Load(&Dep{Name: "Component Dep"}).
		Load(&Component{}).
		//运行
		Run()
}

特性

  • 支持结构体属性的注入,支持私有字段注入 👉🏻依赖注入介绍
  • 支持函数参数的注入,按函数参数类型注入 👉🏻依赖注入介绍
  • Provider机制,支持将外部组件注入到Goner中: 👉🏻Gone V2 Provider 机制介绍
  • 支持代码生成,自动完成组件注册加载(通过Gonectr完成)
  • 支持基于接口mock的单元测试
  • 支持微服务开发的相关Goner组件
  • 支持给Goner定义初始化方法Init()BeforeInit()
  • 支持编写服务类型的Goner:实现 Start() errorStop() error,框架会自动调用Start()和Stop()方法。
  • 支持BeforeStartAfterStartBeforeStopAfterStop等钩子函数,用于在服务启动和停止时执行自定义操作。

架构

architecture

生命周期

flow

快速开始

  1. 安装 gonectrmockgen
    go install github.com/gone-io/gonectr@latest
    go install go.uber.org/mock/mockgen@latest
  2. 创建一个项目
    gonectr create myproject
  3. 运行项目
    cd myproject
    go mod tidy
    gonectr run ./cmd/server

更新记录

v2.0.5

  • 新增 option:"lazy"标签,用于支持字段的延时注入,参考文档
  • 注意:使用option:"lazy"标记的字段在InitProvideInject这几个方法中不能使用;

v2.0.4

  • 新增 SetValue 函数,用于统一处理各种类型的配置值
  • 重构原有的类型处理逻辑,使用反射提高通用性

v2.0.3

v2.0.0

v2版本做了大量更新,去掉不必要的概念,使用前请参考:Gone@v2 使用说明Gone 从 v1 到 v2 的更新分析

v1.2.1

  • 定义 gone.Provider,一个工厂函数用于将 不是 Goner 的外部组件(结构体、结构体指针、函数、接口)注入到 属性需要注入的Goner;
  • 修复 gone.NewProviderPriest 无法为 生成接口类型的gone.Provider生成Priest;
  • goner/gorm编写测试代码,补齐其他测试代码;文档更新。

v1.2.0

  • 提供一种新的 gone.GonerOption,可以将按类型注入,将构造注入类型实例的任务代理给一个实现了 Suck(conf string, v reflect.Value, field reflect.StructField) errorGoner
  • 提供了一个用于实现Goner Provider的辅助函数: func NewProviderPriest[T any, P any](fn func(tagConf string, param P) (T, error)) Priest
  • goner/xorm 集群模式提供策略配置的方案;
  • 完善goner/gorm代码 和 做功能测试,支持多种数据库的接入。

v1.1.1

  • goner/xorm 支持集群 和 多数据库,最新文档:https://goner.fun/zh/references/xorm.html
  • 新增 goner/gorm,封装gorm.io/gorm,用于数据库的访问,暂时只支持mysql,完善中...

贡献

如果您发现了错误或有功能请求,可以随时提交问题 ,同时欢迎提交拉取请求

联系方式

如果您有任何问题,欢迎通过以下方式联系我们:

许可证

gone 在 MIT 许可证下发布,详情请参阅 LICENSE 文件。

About

Gone is a lightweight dependency injection framework for Golang, designed to integrate with a variety of third-party components, enabling rapid development of cloud-native micro services.

Topics

Resources

License

Code of conduct

Stars

Watchers

Forks

Languages