GoLang的wire框架使用例子


简介

Wire 是一个轻巧的 Golang 依赖注入工具。它由 Go Cloud 团队开发,通过自动生成代码的方式在编译期完成依赖注入。

Wire使用小例子源码结构说明

├─demo1 基本用法
├─demo2 接口绑定
├─demo3 结构体值注入
└─demo4 对错误的处理

使用说明

安装wire命令

go get github.com/google/wire/cmd/wire

这个只需要安装一次就可以了,没必要为每个项目都安装一次。

基本概念

providerinjectorwire的两个核心概念。

  1. provider是普通的go函数,用它来产生指定对象的。因而这类函数必须是有返回值的。
  2. injector是组织provider函数按依赖顺序(不是参数传入顺序)生成对象的。此函数的最终目标是生成指定对象,因而必须要有返回值。但它的返回值是在代码生成时确定,编写injector函数时返回值可以任意指定。(参考各demo下的wire.go文件)

使用步骤

wire的使用大体上可以分为以下几步。

1 编写初始化函数

例:

// NewMessage 创建打招呼内容
func NewMessage() Message {
	return Message("Hi there!")
}

此函数初始化了一个Message结构体。这个函数的结果会作为下个函数的输入。如果初始化函数与的输入与输出与其他初始化函数都没关系,那么wire代码生成失败。

此类函数被称为provider

2 组织初始化函数流程

例:

// InitGreeteEvent1 使用 wire 生成初始化代码
func InitGreeteEvent1() Event {
	wire.Build(NewEvent, NewGreeter, NewMessage)
	return Event{} // 这里的返回值不重要。
}

此函数是组织一系列相关初始化函数的,并传入wire.Build函数内进行代码生成。

这种函数被称为injector

这里有几点需要注意:

  1. injector函数需要写在wire.go文件内。虽然文件名并非强制使用这个,但wire工具生成的文件名固定为wire_gen.go,不想每次都改文件名就用这个吧。
  2. wire.go文件必须加入//+build wireinject注释,且它与package xxx语句之间至少有一个空行。

3 生成代码

这里倒没什么好说的,命令行到指定目录下执行wire命令就可以了。

官网上的例子都是在main包下,别太死板,这个命令是可以到处执行的。

具体功能的使用可以参考各案例demo。


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM