Многослойная (layered) архитектура - классический подход к организации кода с разделением на горизонтальные слои.
// repository
type UserRepo struct { db *pgxpool.Pool }
func (r *UserRepo) GetByID(ctx context.Context, id int64) (*User, error) { ... }
// service
type UserService struct { repo *UserRepo }
func (s *UserService) Register(ctx context.Context, req RegisterReq) error { ... }
// handler
type UserHandler struct { svc *UserService }
func (h *UserHandler) HandleRegister(w http.ResponseWriter, r *http.Request) { ... }
Зависимости идут сверху вниз: handler -> service -> repository. Нижний слой не знает о верхнем. Прост для понимания, хорошо подходит для небольших и средних проектов.