I want to place the handler functions of a gRPC server into a package but need to inject dependencies with a Env struct. How can I do this?
I created another package where the Env struct is located and imported this into the handler package and into the main
Main:
package main
import (
"log"
"net"
"google.golang.org/grpc"
pb "google.golang.org/grpc/examples/helloworld/helloworld"
"dep/models"
)
func main() {
env := &models.Env{Addr: ":2222"}
lis, err := net.Listen("tcp", env.Addr)
if err != nil {
log.Fatalf("failed to listen: %v", err)
}
s := grpc.NewServer()
pb.RegisterGreeterServer(s, env)
log.Println("started")
if err := s.Serve(lis); err != nil {
log.Fatalf("failed to serve: %v", err)
}
}
handlers:
package handlers
import (
"google.golang.org/grpc/examples/helloworld/helloworld"
"context"
"dep/models"
)
func (e models.Env) SayHello(context.Context, *helloworld.HelloRequest) (*helloworld.HelloReply, error) {
panic("implement me")
}
models:
package models
type Env struct{
Addr string
}
I expected that the dependency can be injected.