Git
何をしているか
struct間の依存関係を記述するのを自動で生成してくれる。
作るべきファイル
1. 依存関係を実装しているファイル(main.goとか)
2. 自動生成するにあたってヒントを与えるファイル(wire.go)
↓を実行
$ wire gen
- 同じディレクトリにwire_gen.goが出来上がっている。
多分、実際の処理で利用していくファイルはwire_gen.goを使って処理をしてくはず。
wire gen
を実行するまではmain.goのInitialEventが無いっておこられているから。
wire_gen.goが出来上がるとそのエラーはなくなる。
- 結果
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
}