LoginSignup
3
3

More than 3 years have passed since last update.

【Golang wire】なんとなく理解した備忘録

Last updated at Posted at 2020-01-17

Git

何をしているか

struct間の依存関係を記述するのを自動で生成してくれる。

作るべきファイル

1. 依存関係を実装しているファイル(main.goとか)
2. 自動生成するにあたってヒントを与えるファイル(wire.go)

↓を実行

$ wire gen
  1. 同じディレクトリにwire_gen.goが出来上がっている。

多分、実際の処理で利用していくファイルはwire_gen.goを使って処理をしてくはず。
wire genを実行するまではmain.goのInitialEventが無いっておこられているから。
wire_gen.goが出来上がるとそのエラーはなくなる。

  1. 結果
src
 main.go
 wire.go
 wire_gen.go // wire getで生成されたファイル
main.go
package main

import (
    "fmt"
)

type Event struct {
    Greeter Greeter
}

type Greeter struct {
    Message Message
}

type Message string

func NewEvent(g Greeter) (Event) {
    return Event{Greeter: g}
}

func NewGreeter(m Message) Greeter {
    return Greeter{Message: m}
}

func NewMessage(p string) Message {
    return Message(p)
}

func (e Event) Start() {
    msg := e.Greeter.Great()
    fmt.Println(msg)
}

func (g Greeter) Great() Message {
    return g.Message
}

func main() {
    e := InitializeEvent("takutakutakujiro")

    e.Start()
}
wire.go
//+build wireinject

package test

import "github.com/google/wire"

func InitializeEvent(phrase string) Event {
    wire.Build(NewEvent, NewGreeter, NewMessage)
    return Event{}
}
wire_gen.go
// Code generated by Wire. DO NOT EDIT.

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

package test

// Injectors from wire.go:

func InitializeEvent(phrase string) Event {
    message := NewMessage(phrase)
    greeter := NewGreeter(message)
    event := NewEvent(greeter)
    return event
}

3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3