如何应对这种进口周期?
How to deal with this kind of import cycle?
我是 Go 的新手,我陷入了一个导入周期,我不确定该如何解决。我有多个实现特定接口的 class。我还有另一个 class 将 return 对应于特定 class id 的接口。当任何特定的 class 需要使用我的另一个 class 时,问题就来了。这是一个例子:
package examplepkg
import otherpkg
type ExampleClass {}
func NewExampleClass() *ExampleClass {
return &ExampleClass{}
}
func (ex *ExampleClass) ExampleMethod() { // Implements ExampleInterface
var id int // Read from some external source
theinterface := otherpkg.GetExampleInterface(id)
theinterface.ExampleMethod()
}
以及另一个包中的函数:
package otherpkg
import examplepkg
func GetExampleInterface(id int) *ExampleInterface {
switch id {
case 3000: return examplepkg.NewExampleClass()
}
}
如果您需要一些上下文,我正在从我没有创建的源中读取一些数据,这些数据使用 ID 封装了某种数据类型。例如:id somedata id2 somedata2。并使用特定的 id,我可以调用该方法来获取良好的数据类型和大小。它们可以嵌套,这就是为什么我使用相同的方法 ExampleMethod()。
谁能帮我在 Go 中清楚地理解这个问题?
您正在创建一个导入 otherpkg
的包 examplepkg
,当编译器读取此文件时,它会先尝试解决导入问题,然后再实际 运行 里面的代码 examplepkg
.
问题是您的包 otherpkg
正在导入 examplepkg
并且正如我之前所说,它将首先尝试解决导入问题。因此,编译器将返回 examplepkg
并尝试解决导入问题,但它会再次导致 otherpkg
.
这会导致您面临导入周期。此问题的一种解决方案是创建一个新包,在其中声明类型 ExampleClass
并声明 func NewExampleClass
。然后让 examplepkg
和 otherpkg
从这个新创建的包中导入,打破你现在面临的导入周期。
两种解决方法:
创建一个包含两者共有功能的新包,然后在两个包中导入该包。
考虑是否所有这些都属于同一个包,而不是两个不同的包。
我是 Go 的新手,我陷入了一个导入周期,我不确定该如何解决。我有多个实现特定接口的 class。我还有另一个 class 将 return 对应于特定 class id 的接口。当任何特定的 class 需要使用我的另一个 class 时,问题就来了。这是一个例子:
package examplepkg
import otherpkg
type ExampleClass {}
func NewExampleClass() *ExampleClass {
return &ExampleClass{}
}
func (ex *ExampleClass) ExampleMethod() { // Implements ExampleInterface
var id int // Read from some external source
theinterface := otherpkg.GetExampleInterface(id)
theinterface.ExampleMethod()
}
以及另一个包中的函数:
package otherpkg
import examplepkg
func GetExampleInterface(id int) *ExampleInterface {
switch id {
case 3000: return examplepkg.NewExampleClass()
}
}
如果您需要一些上下文,我正在从我没有创建的源中读取一些数据,这些数据使用 ID 封装了某种数据类型。例如:id somedata id2 somedata2。并使用特定的 id,我可以调用该方法来获取良好的数据类型和大小。它们可以嵌套,这就是为什么我使用相同的方法 ExampleMethod()。
谁能帮我在 Go 中清楚地理解这个问题?
您正在创建一个导入 otherpkg
的包 examplepkg
,当编译器读取此文件时,它会先尝试解决导入问题,然后再实际 运行 里面的代码 examplepkg
.
问题是您的包 otherpkg
正在导入 examplepkg
并且正如我之前所说,它将首先尝试解决导入问题。因此,编译器将返回 examplepkg
并尝试解决导入问题,但它会再次导致 otherpkg
.
这会导致您面临导入周期。此问题的一种解决方案是创建一个新包,在其中声明类型 ExampleClass
并声明 func NewExampleClass
。然后让 examplepkg
和 otherpkg
从这个新创建的包中导入,打破你现在面临的导入周期。
两种解决方法:
创建一个包含两者共有功能的新包,然后在两个包中导入该包。
考虑是否所有这些都属于同一个包,而不是两个不同的包。