Ядро приложения (домен + use cases) не зависит от внешнего мира. Порты - интерфейсы (входящие: API, входящие сообщения; исходящие: репозиторий, внешние API). Адаптеры реализуют порты: HTTP handler, gRPC server, PostgreSQL репозиторий, HTTP-клиент к другому сервису. В Go порты в пакете domain или app; адаптеры в отдельных пакетах (adapters/http, adapters/postgres). Тестирование ядра с моками адаптеров.
type UserPort interface { GetByID(ctx context.Context, id int64) (*User, error) }
type UserRepositoryPort interface { FindByID(ctx context.Context, id int64) (*User, error) }