You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Google Wire注入:如何处理提供者函数多返回值仅注入其一

Google Wire 处理多返回值仅注入单个值的方案

针对你提出的两种多返回值场景,分别给出具体实现方案:

场景1:构造函数返回(目标类型,error)

比如NewMessage() (Message, error)这种带错误返回的情况,Wire原生支持错误传递,只需要调整初始化函数的返回类型,让错误能向上透传即可:

修改后的初始化代码:

func main() {
    e, err := InitializeEvent()
    if err != nil {
        log.Fatalf("初始化失败: %v", err)
    }
    e.Start()
}
    
func InitializeEvent() (Event, error) {
    wire.Build(NewEvent, NewMessage)
    return Event{}, nil
}

Wire会自动识别构造函数的错误返回值,将NewMessage产生的错误传递给InitializeEvent的调用者,你只需要在主函数里正常处理错误就行。

场景2:构造函数返回两个不同类型的值(仅需其中一个)

比如NewMessage() (Message, Greeter)这种情况,我们可以写一个适配器函数,接收所有返回值并只返回需要的那个类型,然后把这个适配器加入Wire的依赖链:

首先定义适配器函数:

// 只提取Message,忽略Greeter
func GetMessageOnly(msg Message, _ Greeter) Message {
    return msg
}

然后修改初始化函数:

func InitializeEvent() Event {
    wire.Build(NewEvent, GetMessageOnly, NewMessage)
    return Event{}
}

Wire会先调用NewMessage得到Message和Greeter,再把这两个值传给GetMessageOnly,提取出我们需要的Message,最后注入给NewEvent完成初始化。

另外还有一种更简洁的方式,直接在Wire的构建声明里用匿名函数(可读性稍差):

func InitializeEvent() Event {
    wire.Build(
        NewEvent,
        func(msg Message, _ Greeter) Message { return msg },
        NewMessage,
    )
    return Event{}
}

内容的提问来源于stack exchange,提问作者vuhoanghiep1993

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 12:00:50