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