我的项目结构如下所示:
代码结构:
hypervisor
├── hypervisor.go
├── hyperv
│ └── hyperv.go
└── virtualbox
├── vbox.go
└── vboxprops.go
源代码:
//hypervisor/hypervisor.go
package hypervisor
type Hypervisor interface {
Start(vmName string) error
ListMounts(vmName string) ([]MountPath, error)
//....
}
type MountPath struct {
HostPath string
GuestPath string
}
func detect() (Hypervisor, error) {
return &virtualbox.Virtualbox{}, nil // <<1 HERE
}
// ... other code
并有另一个(嵌套)包:
//hypervisor/virtualbox/vbox.go
package virtualbox
type Virtualbox struct {
}
func (*Virtualbox) Start(vmName string) error {
return vboxManage("startvm", vmName, "--type", "headless").Run()
}
func (*Virtualbox) ListMounts(vmName string) ([]hypervisor.MountPath, error) { // <<2 HERE
// ....
}
// ... other code
正如所见,当然,这样的代码会导致import cycle not allowed
. 因为:
hypervisor
pcakge 引用virtualbox.VirtualBox
类型
virtualbox
包引用hypervisor.MountPath
类型
我知道如果我将结构移动MounthPath
到另一个包会解决问题,但我认为这不是正确的解决方案设计方式。
有什么建议吗?
素胚勾勒不出你
眼眸繁星
相关分类