go 依赖注入工具( go-wire )使用(二 用户指南)

本文介绍了Go语言中的依赖注入工具go-wire,重点讲解了提供者和注入者的核心概念,包括如何创建提供者、绑定接口、构造体提供者、绑定值以及使用结构体字段作为提供者,并且提到了清理方法的应用场景。
摘要由CSDN通过智能技术生成

go 依赖注入工具( go-wire )使用(二 用户指南)

wire 有两个核心概念: 提供者与注入者

提供者providers

providers 是一个能够返回值的方法:

package foobarbaz

type Foo struct {
   
	X int
}
func ProvideFoo() Foo  {
   
	return Foo{
   X: 42}
}

type Bar struct {
   
	X int
}
func ProvideBar(foo Foo) Bar {
   
	return Bar{
   X: -foo.X}
}

type Baz struct {
   
	X int
}
func ProvideBaz(ctx context.Context, bar Bar) (Baz, error) {
   
	if bar.X == 0 {
   
		return Baz{
   }, errors.New("cannot provide baz when bar is zero")
	}
	return Baz{
   X: bar.X}, nil
}

这些都属于提供者。如果经常使用多个提供者,可以将它们放入提供者集合中:

var FooSet = wire.NewSet(ProvideFoo)
var SuperSet = wire.NewSet(FooSet, ProvideBar)
var ProviderSet = wire.NewSet(SuperSet, ProvideBaz)
// or
// var ProviderSet = wire.NewSet(ProvideFoo, ProvideBar, ProvideBaz) 

集合可以 自由组合成为新的集合

注射者Injectors

init.go

package foobarbaz

import (
	"context"
	"github.com/google/wire"
)

func initializeBaz(ctx context.Context) (Baz, error)  {
   
	wire.Build(ProviderSet)
	return Baz{
   }, nil
}

func initializeBar(ctx context.Context) (Bar, error)  {
   
	wire.Build(ProviderSet)
	return Bar{
   }, nil
}

func initializeFoo(ctx context.Context) (Foo, error)  {
   
	wire.Build(ProviderSet)
	return Foo{
   }, nil
}

这时运行wire命令就能看到生成的wire_gen.go文件:

// Code generated by Wire. DO NOT EDIT.

//go:generate wire
//+build !wireinject

package foobarbaz

import 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值