本文首发于我的个人博客
本文记录了作者在golang开发中,通过抽取接口,依赖注入的方式,解决包与包之间的不合理引用关系。
总结来说:
面向接口编程,并且golang中接口函数的参数最好是标准库的类型
场景
目前项目中有一个业务逻辑包business_logic
,两个工具库包pkg1
和pkg2
,其中
pkg1
是旧库,API不宜改动,pkg2
是新库,尚未正式使用business_logic
会使用pkg1
和pkg2
pkg1
内部要添加使用pkg2
的逻辑
// pkg1/main.go
package pkg1
import "pkg2"
func ExternalAPI() {
pkg2.ExternalAPI(pkg2.S{
})
}
// pkg2/main.go
package pkg2
type S struct {
param1 int
}
func ExternalAPI(s S) {
}
// business_logic/main.go
package main
import (
"pkg1"
"pkg2"
)
func main() {
pkg