gutowire

package module
v0.0.0-...-b388aef Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jun 21, 2022 License: GPL-3.0 Imports: 27 Imported by: 0

README

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

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func IWantA

func IWantA(in interface{}, searchDepDirs ...string) (_ struct{})

func RunAutoWire

func RunAutoWire(genPath string, opts ...Option) (err error)

func RunAutoWireGen

func RunAutoWireGen(genPath string, opts ...Option) (err error)

Types

type Option

type Option func(*opt)

func InitStruct

func InitStruct(initStruct ...string) Option

func WithPkg

func WithPkg(pkg string) Option

func WithSearchPath

func WithSearchPath(path string) Option

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL