You can write your microservices from scratch (in Go or any other language) and they will interact with each other just fine through their APIs. However, in a real-world system, there will be a large number of shared and/or cross-cutting concerns that you want to be consistent:
- Configuration
- Secret management
- Central logging
- Metrics
- Authentication
- Authorization
- Security
- Distributed tracing
- Service discovery
In practice, microservices in most large production systems will need to comply with certain policies for those concerns.
Enter Go kit (https://gokit.io/). Go kit takes a very modular approach to the microservices space. It provides a high degree of separation of concerns, a recommended approach for structuring your microservice, and a lot of flexibility. As the website says, Few opinions, lightly held.