After designing and implementing your gRPC-based Goa service, you’ll want to run it locally and confirm it works as expected. In this tutorial, we’ll:
From your project’s root (e.g., grpcgreeter/
), run the main.go
you created in
the cmd/greeter/
folder:
go run grpcgreeter/cmd/greeter
If everything is set up correctly, the service listens on port 8090
(as
specified in main.go
).
You should see a log message like:
gRPC greeter service listening on :8090
This indicates the service is active and ready to receive gRPC requests.
If you have the official gRPC CLI tool installed (brew install grpc
on MacOS),
you can simply test your service with:
grpc_cli call localhost:8090 SayHello "name: 'Alice'"
This sends an RPC to the SayHello
method with the name
field set to "Alice"
.
This works because the service is configured to enable server reflection.
gRPCurl (brew install grpcurl
on
MacOS) is another popular tool that can be used to test gRPC services:
grpcurl -plaintext -d '{"name": "Alice"}' localhost:8090 greeter.Greeter/SayHello
You can also write a small Go client using the generated client code. For instance:
package main
import (
"context"
"fmt"
"log"
gengreeter "grpcgreeter/gen/greeter"
genclient "grpcgreeter/gen/grpc/greeter/client"
"google.golang.org/grpc"
"google.golang.org/grpc/credentials/insecure"
)
func main() {
// Set up a connection to the server
conn, err := grpc.Dial("localhost:8090", grpc.WithTransportCredentials(insecure.NewCredentials()))
if err != nil {
log.Fatalf("Failed to connect: %v", err)
}
defer conn.Close()
// Create a gRPC client using Goa's generated code
grpcc := genclient.NewClient(conn)
c := gengreeter.NewClient(grpcc.SayHello())
// Make the RPC call
res, err := c.SayHello(context.Background(), &gengreeter.SayHelloPayload{"Alice"})
if err != nil {
log.Fatalf("Error calling SayHello: %v", err)
}
// Print the response
fmt.Printf("Server response: %s\n", res.Greeting)
}
Compile and run this client, and it should print the greeting returned by your service.
That’s it! You now have a running gRPC service built with Goa, tested either via the official gRPC CLI or a custom Go client. Continue exploring the DSL to add more features—like streaming, authentication interceptors, or automatic code generation for multiple environments. You’re well on your way to a robust Go-based microservices architecture with minimal boilerplate!