wire icon indicating copy to clipboard operation
wire copied to clipboard

Wire generate: Support generics

Open pauky opened this issue 2 years ago • 2 comments

Is your feature request related to a problem? Please describe.

When I used wire to build the code with go generics in golang:1.18, but It didn't work and throw some error. There are some code, command and log in Additional context.

Describe the solution you'd like

I think that wire should support code with go generics as soon as possible for golang:1.18. It must a great power to help developers to build the apps.

Describe alternatives you've considered

Nothing.

Additional context

Code

main.go

package main

import "fmt"

type Message struct {
	Msg string
	V   int
}

func NewMessage(v int) Message {
	return Message{Msg: "Hi there!", V: v + 1}
}

type Greeter struct {
	Message Message // <- adding a Message field
}

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

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

type V interface {
	int | float32
}

func NewV[T V]() T {
	return 2
}

type Event struct {
	Greeter Greeter // <- adding a Greeter field
}

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

func (e Event) Start() {
	m := e.Greeter.Greet()
	fmt.Println(m.Msg, m.V)
}

func main() {
	e := InitializeEvent()

	e.Start()
}

// func main() {
// 	v := NewV[int]()
// 	message := NewMessage(v)
// 	greeter := NewGreeter(message)
// 	event := NewEvent(greeter)
// 	event.Start()
// }

wire.go

//go:build wireinject

package main

// The build tag makes sure the stub is not built in the final build.

import "github.com/google/wire"

func InitializeEvent() Event {
	wire.Build(NewEvent, NewGreeter, NewMessage, NewV)
	return Event{}
}
Command
wire
Error log
wire: ~/test/wire/main.go:27:6: expected ';', found '|'
wire: ~/test/wire/main.go:31:2: expected '}', found 'return'
wire: ~/test/wire/main.go:31:9: expected ';', found 2
wire: ~/test/wire/main.go:27:2: int is not an interface
wire: ~/test/wire/wire.go:10:47: undeclared name: NewV
wire: generate failed

pauky avatar Mar 31 '22 12:03 pauky

#360 provides a workaround. See comment for details. Note that this may not work for many use cases of generics. Full support is not planned.

stytchiz avatar Jun 20 '22 00:06 stytchiz

Full support is not planned.

Wow.

dcormier avatar Feb 09 '24 14:02 dcormier