我想确保我的Go包使用“dal”包提供的var实例,并且不会意外地直接导入和使用db访问包。
我想我可以在源代码上进行regexp搜索,但我想知道是否有办法通过标准的Go测试确保规则?
只是想知道我将要做什么:
接口包:
package dal
type UserDal interface {
GetUser(id int) User
}
实施包:
package dal_db_specific
import (
"some_db"
"dal"
)
type UserDalDbSpecific struct {
}
func (_ UserDalDbSpecific) GetUser(id int) User {
some_db.executeQuery(...)
...
return user
}
register_dal() {
dal.UserDal = UserDalDbSpecific{}
}
用户代码包:
import (
"dal"
"some_db" <-- Fail here!
)
func someFunc() {
user := dal.User.GetUser(1) // Right way
some_db.DoSomething() <-- Fail here!
}
答案 0 :(得分:5)
比grep更可靠:使用标准parser
package解析目标源并检查AST。您正在寻找与数据库访问包匹配的ImportSpec
个节点。如果发现任何测试,则测试失败。