下载wire
普通的方式
package main
type Config struct{}
type Repo struct {
cfg *Config
}
type Server struct {
cfg *Config
repo *Repo
}
func NewConfig() *Config {
return &Config{}
}
func NewRepo(cfg *Config) *Repo {
return &Repo{cfg: cfg}
}
func NewServer(cfg *Config, repo *Repo) *Server {
return &Server{
cfg: cfg,
repo: repo,
}
}
func (s *Server) Start() {
}
func main() {
cfg := NewConfig()
repo := NewRepo(cfg)
srv := NewServer(cfg, repo)
srv.Start()
}
wire方式
main.go中
package main
func main(){
srv:=Create()
srv.Start()
}
wire.go中
//+build wireinject
package main
import (
"github.com/google/wire"
)
func Create() *Server {
panic(wire.Build(NewConfig, NewRepo, NewServer))
}
执行
wire
生成wire_gen,go
// Code generated by Wire. DO NOT EDIT.
//go:generate wire
//+build !wireinject
package main
// Injectors from wire.go:
func Create() *Server {
config := NewConfig()
repo := NewRepo(config)
server := NewServer(config, repo)
return server
}