golang依赖注入工具

digo工具地址:https://github.com/werbenhu/digo

特性

  • 使用注释中的注解
  • 自动代码生成
  • 自动检测循环依赖
  • 编译时期依赖注入
  • 自动初始化
  • 支持实例组的管理

快速开始

更多示例请参考:examples

编写代码和注解

package main

import (
"log" "github.com/werbenhu/digo"
) // @provider({"id":"main.db.url"})
func NewDbUrl() string {
return "localhost:3306"
} type Db struct {
url string
} // @provider({"id":"main.db"})
// @inject({"param":"url", "id":"main.db.url"})
func NewDb(url string) *Db {
return &Db{
url: url,
}
} type App struct {
Db *Db
} // @provider({"id":"main.app"})
// @inject({"param":"db", "id":"main.db"})
func NewApp(db *Db) *App {
return &App{
Db: db,
}
} func (a *App) Start() {
log.Printf("app strat, db:%s\n", a.Db.url)
} func main() {
app, err := digo.Provide("main.app")
if err == nil {
app.(*App).Start()
}
}

安装digogen工具

go install github.com/werbenhu/digo/digogen@v1.0.0

生成依赖注入代码

打开命令行执行下面命令,digogen将会根据注解自动生成digo.generated.go源码文件.

digogen

运行代码

go run .\digo.generated.go .\main.go

注解详情

@provider

@provider注解表示是一个实例提供者,该实例是一个单例

  • 示例
// @provider({"id":"main.db"})
  • 支持的参数:
参数 类型 是否必需 说明
id string 实例的id

如果获取实例,通过digo.Provide(providerId)可以获取到某一个provider的实例

app, err := digo.Provide("main.app")
if err == nil {
app.(*App).Start()
}

@inject

@inject注解表示注入一个实例到某个参数, @inject注解必须和@provider或者@group二者中的一个同时存在.

  • 示例
// @inject({"param":"db", "id":"main.db"})
  • 支持的参数:
参数 类型 是否必需 说明
param string 指明哪个参数需要注入实例
id string 指明需要注入的实例id
pkg string 该参数需要引入特定的包

pkg在什么时候需要使用,比如我们需要引入一个包 github.com/xxx/tool/v1 , 我们使用包名的时候是这样使用的 *tool.Struct, 而不是 *v1.Struct,那我们需要显示指明需要导入github.com/xxx/tool/v1

// @inject({"param":"tool", "id":"main.tool", "pkg":"github.com/xxx/tool/v1"})

@group

@group注解表示将实例注册到一个组

  • 示例
// @group({"id":"main.controllers"})
  • 支持的参数:
参数 类型 是否必需 说明
id string 组的id

如果获取组的所有实例,通过digo.Members(groupId)可以获取到组的所有实例

ctrls, err := digo.Members("main.controllers")
if err == nil {
for _, controller := range ctrls {
// TODO:
}
}

golang依赖注入工具digo的更多相关文章

  1. Golang依赖管理工具: go module 详解

    Golang依赖管理工具: go module (go1.11+) 大多数语言都会有包管理工具,像Node有npm,PHP有composer,Java有Maven和Gradle. 可是,Go语言一直缺 ...

  2. Golang依赖管理工具:glide从入门到精通使用

    这是一个创建于 2017-07-22 05:33:09 的文章,其中的信息可能已经有所发展或是发生改变. 介绍 不论是开发Java还是你正在学习的Golang,都会遇到依赖管理问题.Java有牛逼轰轰 ...

  3. 【ASP.NET MVC 学习笔记】- 05 依赖注入工具Ninject

    本文参考:http://www.cnblogs.com/willick/p/3223042.html 1.Ninject是一款轻量级的DI工具,可通过VS的插件NuGet将其引用到项目中. 2.使用N ...

  4. Compile-time Dependency Injection With Go Cloud's Wire 编译时依赖注入 运行时依赖注入

    Compile-time Dependency Injection With Go Cloud's Wire - The Go Blog https://blog.golang.org/wire Co ...

  5. golang常用库包:Go依赖注入(DI)工具-wire使用

    google 出品的依赖注入库 wire:https://github.com/google/wire 什么是依赖注入 依赖注入 ,英文全名是 dependency injection,简写为 DI. ...

  6. <Pro .NET MVC4> 三大工具之依赖注入神器——Ninject

    这篇内容是对<Pro .NET MVC4>一书中关于Ninject介绍的总结. Ninject是.NET MVC的一款开源的依赖注入工具. 使用场景:当MVC项目中使用了依赖注入技术来给程 ...

  7. Java Web系列:Spring依赖注入基础

    一.Spring简介 1.Spring简化Java开发 Spring Framework是一个应用框架,框架一般是半成品,我们在框架的基础上可以不用每个项目自己实现架构.基础设施和常用功能性组件,而是 ...

  8. .Net Core中依赖注入服务使用总结

    一.依赖注入 引入依赖注入的目的是为了解耦和.说白了就是面向接口编程,通过调用接口的方法,而不直接实例化对象去调用.这样做的好处就是如果添加了另一个种实现类,不需要修改之前代码,只需要修改注入的地方将 ...

  9. 谈谈 Act 的依赖注入 和 模板输出 - 回答 drinkjava 同学提问

    1. 背景 依赖注入工具 jBeanBox 的作者 drinkjava 同学最近在 Actframework gitee 项目 的提出了如下评论: 你这个DI工具的出发点可能有问题,一个MVC工具为什 ...

  10. Go工程化 - 依赖注入

    我们在微服务框架kratos v2的默认项目模板中kratos-layout使用了google/wire进行依赖注入,也建议开发者在维护项目时使用该工具. wire 乍看起来比较违反直觉,导致很多同学 ...

随机推荐

  1. yhm的丘赛题解(其中的一些简单题)

    有选择地做了丘赛里的一些简单题,不定期更新     目录 [简单组合数学]2011丘赛个人[应数计算数学概统]第3题题解 [拉格朗日多项式插值]2011丘赛个人[应数计算数学概统]第2题题解 [概率] ...

  2. Spring Boot 中的 ApplicationRunner 和 CommandLineRunner

    前言 一般项目中的初始化操作,初次遇见,妙不可言.如果你还有哪些方式可用于初始化操作,欢迎在评论中分享出来~ ApplicationRunner 和 CommandLineRunner Spring ...

  3. 提供一款局域网聊天小工具,对接了chatGPT3.5

    账号.密码随便填,只要自己能记住就可以,网络地址如效果图(本机IP地址+8080端口),效果图如下 服务地址用本机IP,端口可以随便用一个,如8888,填完记得点击按钮开启: 通讯地址如果你有其他人的 ...

  4. Low-Code,一定“low”吗?

    作者:京东保险 吴凯 前言 低代码是一组数字技术工具平台,基于图形化拖拽.参数化配置等更为高效的方式,实现快速构建.数据编排.连接生态.中台服务.通过少量代码或不用代码实现数字化转型中的场景应用创新. ...

  5. java idea配置流程

    这篇文章主要介绍了IntelliJ IDEA2021.1 配置大全(超详细教程),需要的朋友可以参考下 一.IDEA下载 idea.jdk.tomcat.maven下载地址请参考上一篇博客:https ...

  6. 一文吃透Arthas常用命令!

    Arthas 常用命令 简介 Arthas 是Alibaba开源的Java诊断工具,动态跟踪Java代码:实时监控JVM状态,可以在不中断程序执行的情况下轻松完成JVM相关问题排查工作 .支持JDK ...

  7. python:生成半年内的巡检日报execl

    问题描述:使用脚本来生成半年内的数据,数据内容大概为每天的数据库巡检日报,临时抱佛脚.数据不可能是真实的,都是随机生成的,想要使用真实的数据后面直连操作系统或者数据库.后期可以慢慢实现自动化生成每天的 ...

  8. linux shell 自动化部署 npm vue 项目

    此 shell 是提供给前端登录服务器自动化部署 vue 项目的 用此命令,工具化部署项目,可以杜绝前端自己部署项目时,对服务器违规操作 如有其它问题,可在下方留言! #!/bin/sh # url: ...

  9. Yii2批量插入数据

    方法一 yii2一次插入多行数据  /** * @inheritdoc 批量添加 * @params $add array 添加数据 */ public function add_all($add) ...

  10. Sphinx 配置文件说明

    一.    创建sphinx.conf文件 其结构组成主要如下: Source 源名称1{                //指定数据源 一些配置 } Index 索引名称1{ Source=源名称1 ...