as long as the codebase not overly layered, I guess any framework is fine
only need to split to 3 kind of layer:
1. serialization/transport layer (codegenerated) -- framework goes here
2. business logic layer (one that unit tested), only input struct, transform/process, and output struct (DTOs)
3. persistence/3rd party layer (codegenerated too), add additional go source code file for things that wasteful to be codegenerated, only input struct, basic persistence methods or network calls, and output struct (DAOs) goes here
if using gRPC layer 1 already codegenerated, so only need to fill layer 2 with business logic and codegenerating layer 3.