Awesome
Go-AutoWire
helps you to generate wire files with easy annotate
this project is base on wire
but it did simplify
the wire usage and make wire much more stronger
Installation
Install Wire by running:
go get github.com/google/wire/cmd/wire
then
Install Gutowire by running:
go get github.com/Just-maple/go-autowire/cmd/gutowire
and ensuring that $GOPATH/bin is added to your $PATH.
Usage example
If you want to build a zoo
,you may need some dependencies like animals
package example
type Zoo struct{
Cat Cat
Dog Dog
FlyAnimal FlyAnimal
}
type Cat struct{
}
type FlyAnimal interface{
Fly()
}
type Bird struct{
}
func (b Bird)Fly(){
}
type Dog struct{
}
in traditional wire
,you need to write some files to explain the wire relation to google/wire
package example_zoo
import (
"github.com/google/wire"
)
var zooSet = wire.NewSet(
wire.Struct(new(Zoo), "*"),
)
var animalsSet = wire.NewSet(
wire.Struct(new(Cat), "*"),
wire.Struct(new(Dog), "*"),
wire.Struct(new(Bird), "*"),
wire.Bind(new(FlyAnimal), new(Bird)),
)
var sets = wire.NewSet(zooSet, animalsSet)
func InitZoo() Zoo {
panic(wire.Build(sets))
}
you need to rewrite your wire.go
and comes much more harder to manager all the dependencies
as your zoo goes bigger and bigger
but now
you can use gutowire
write annotate as below
package example
// @autowire.init(set=zoo)
// it will be collect into zooSet (this comment is not necessary)
type Zoo struct{
Cat Cat
Dog Dog
FlyAnimal FlyAnimal
}
// it will be collect into animalsSet (this comment is not necessary)
// @autowire(set=animals)
type Cat struct{
}
type FlyAnimal interface{
Fly()
}
// it will be collect into animalsSet and wire as interface FlyAnimal (this comment is not necessary)
// @autowire(set=animals,FlyAnimal)
type Bird struct{
}
func (b Bird)Fly(){
}
// it will be collect into animalsSet (this comment is not necessary)
// @autowire(set=animals)
type Dog struct{
}
.init
in @autowire.init(set=zoo)
will auto write InitializeZoo func in wire.gen.go like below:
// Code generated by go-autowire. DO NOT EDIT.
// +build wireinject
//
package example_zoo
import "github.com/google/wire"
func InitializeZoo() (*Zoo, func(), error) {
panic(wire.Build(Sets))
}
and run
gutowire -s ./example_zoo ./example_zoo
-s
means scope to look up build dependencies
all the wire files you need will generate
look at file generated in example_zoo