因此,我有一个要解决的导入周期。我有以下模式:
view/ - view.go action/ - action.go - register.go
总体思路是,操作是在视图上执行的,并由视图执行:
// view.go type View struct { Name string } // action.go func ChangeName(v *view.View) { v.Name = "new name" } // register.go const Register = map[string]func(v *view.View) { "ChangeName": ChangeName, }
然后在view.go中调用它:
func (v *View) doThings() { if action, exists := action.Register["ChangeName"]; exists { action(v) } }
但这会导致一个周期,因为View依赖于Action包,反之亦然。我该如何解决这个周期?有其他方法可以解决此问题吗?
导入周期表明设计存在根本错误。从广义上讲,您正在查看以下内容之一:
view
action.Register
action
View
一般而言,您希望设计一个应用程序,以便拥有三种基本类型的软件包:
main