请教各位,模块化分离之后,如何解决循环引用的问题

最近在写一个 Web 应用,主要提供 API 接口

项目目录结构大概是这样

├── config
├── controller
│   ├── address
│   ├── admin
│   ├── auth
│   ├── banner
│   ├── downloader
│   ├── email
│   ├── finance
│   ├── invite
│   ├── menu
│   ├── message
│   ├── news
│   ├── notification
│   ├── oauth2
│   ├── report
│   ├── resource
│   ├── role
│   ├── system
│   ├── transfer
│   ├── uploader
│   ├── user
│   └── wallet
├── exception
├── message_queue
├── middleware
├── model
├── rbac
│   ├── accession
│   └── role
├── schema
├── service
│   ├── database
│   ├── dotenv
│   ├── email
│   ├── redis
│   └── token
└── util

现在功能还少,可以把各个部分放在一个目录,但是随着功能不断增加,目录文件不断增加,比如 model/schema/controller 文件夹

目前想把这些功能分离,模块化。

例如

- modules
  - user
    - user.model.go
    - user.schema.go
    - user.controller.go
    - user.service.go
  - 其他模块...

这样分离的好处的显而易见的,功能模块都放在一起。

但是这样就可能会有循环引用。

举个例子:

A.controller.go 引用 B.schema.go
B.controller.go 引用 A.schema.go

在其他语言,一个文件是一个模块,可以单独导入一个文件,这样不会有循环引用,但是 Golang 按文件夹作为模块,所有就有了循环依赖。

所以请问各位大佬,请问有什么好的解决办法吗?或者更好的目录/模块划分

共 0 个回复