登录
首页 >  Golang >  Go问答

无法生成wire_gen.go的原因是什么?

来源:stackoverflow

时间:2024-03-22 15:16:31 169浏览 收藏

大家好,今天本人给大家带来文章《无法生成wire_gen.go的原因是什么?》,文中内容主要涉及到,如果你对Golang方面的知识点感兴趣,那就请各位朋友继续看下去吧~希望能真正帮到你们,谢谢!

问题内容

我正在尝试使用 google/wire 进行依赖项注入。

当我在终端中使用 wire check 命令时,它显示为 *my_go_app.listener 找到 no 提供程序,注射器 的输出。

  • wire.go
// +build wireinject
package main

import (
    "fmt"

    "github.com/google/wire"
)

type speaker interface {
    say()
}

type hellospeaker struct {
    word string
}

func newhellospeaker() *hellospeaker {
    return &hellospeaker{
        word: "hello, world!!",
    }
}

func (s *hellospeaker) say() {
    fmt.printf("%s", s.word)
}

type listener interface {
    whatilistened()
}

type simplelistener struct {
    speaker *speaker
}

func newsimplelistener(speaker *speaker) *simplelistener {
    return &simplelistener{
        speaker: speaker,
    }
}

func (l *simplelistener) whatilistened() {
    (*l.speaker).say()
}

func initializelistener() *listener {
    wire.build(
        newhellospeaker,
        newsimplelistener,
    )
    return nil
}

  • main.go
package main

func main() {
    listener := InitializeListener()
    (*listener).WhatIListened()
}

我尝试过的如下。

  • newsimplelistener 返回 *listener,但 &simplelistener*listener 不匹配。
  • 使用 wire.bind,但错误消息相同。

simplelistener 未实现 listener


解决方案


wire 似乎不够智能,无法进行自动转换。

wire.go

   ...
//change type of argument of speaker from *speaker to speaker
//don't  want to create a new conversion method
func newsimplelistener(speaker speaker) *simplelistener 
   ...
func initializelistener() listener {
    wire.build(
        newhellospeaker, //*hellospeaker, hellospeaker doesn't implement speaker interfaces, conversion is needed in next step
        wire.bind(new(speaker),new(*hellospeaker)), //this binding can provide speaker, not *speaker
        newsimplelistener, //scenario as newhellospeaker
        //provide listener, an extra method is needed if *listener is wanted.
        wire.bind(new(listener), new(*simplelistener)),
    )
    return nil
}

main.go

...
    listener := InitializeListener()
    listener.WhatIListened()
...

今天关于《无法生成wire_gen.go的原因是什么?》的内容介绍就到此结束,如果有什么疑问或者建议,可以在golang学习网公众号下多多回复交流;文中若有不正之处,也希望回复留言以告知!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>