
情况是这样的
模块结构如下
/db/db.go: import db/drivers/mysql /db/drivers/mysql/mysql.go : import db 需要 db 里的一个 interface 约束 // mysql.go func xxx(db.XxxxInterface) /db/db_test.go: go test 报错循环依赖
真实使用场景可能是
import db import db/drivers/mysql 那 test 这个怎么解决呢
1 lvsshuttao 2023 年 5 月 23 日 多建一个目录,把 interface 扔进去就好了 |
2 dzdh OP @lvsshuttao 只有这一种方法了吗 |
3 kkhaike 2023 年 5 月 23 日 看起来 lz 在写一个 orm |
4 hzzhzzdogee 2023 年 5 月 23 日 稍稍重构下呗, 提取公共的 |
5 wOuv7i4e7XxsSOR1 2023 年 5 月 23 日 type alias |
6 Ayanokouji 2023 年 5 月 23 日 1 楼说的对。java 的好多想法,在 go 里边用起来非常别扭 |
7 Nazz 2023 年 5 月 23 日 控制程序启动加载顺序, 合理规划包结构 |
8 liarsa 2023 年 5 月 23 日 通常情况下,是设计的不合理,不能用 java 的思想去套 go |
9 ignor 2023 年 5 月 23 日 via iPhone 没写过 go ,但这种情况一般是因为 db 承载了太多功能,最好把功能拆解后让 db 去 import 它们 |
10 cp19890714 2023 年 5 月 23 日 设计有问题,职责范围没有划分清楚 |
11 DefoliationM 2023 年 5 月 23 日 没设计好架构,重新搞搞,把接口都单独放一个包 |
12 chotow 2023 年 5 月 23 日 从名字看,db.go 应该用于放接口、公共产物,不应该去 import 具体的驱动 mysql.go ,后者应该去实现前者的接口 |
13 matrix1010 2023 年 5 月 23 日 首先一个问题是 db 是不是必须要 import driver ,或者说假如有 10 种 drivers 是不是要 import 10 次? db 是上层结构的话不应该依赖 driver 。可以参考官方的 sql( https://pkg.go.dev/database/sql)实现,通过 Register 来在 driver 里自动注册 |
14 matrix1010 2023 年 5 月 23 日 |
15 mrgeneral 2023 年 5 月 24 日 设计不太合理。 db 是 interface ,mysql 是 implements ,咋能反向依赖呢? |