gpt4 book ai didi

import - "Mutual"Golang 包导入

转载 作者:IT王子 更新时间:2023-10-29 01:26:46 24 4
gpt4 key购买 nike

是否可以在 Golang 中执行类似“相互”包导入的操作?

比方说我有两个包,A 和 B,具有函数 AFunc 和 BFunc,BFunc2

package A
import "B"

func AFunc() {
//do stuff but also use
B.BFunc()
}

-

package B
import "A"

func BFunc() {
//do foo
}

func BFunc2() {
//do different stuff but also use
A.AFunc()
}

有没有办法在不使用第三个包作为“桥梁”的情况下实现这一点?

编辑:为了稍微澄清一下这个问题,这当然不可能通过“简单地做”它来实现,因为编译器会抛出一个 import cycle not allowed 错误。问题是,是否有更简洁或更成熟的方法来解决此问题然后构建“桥包”?

最佳答案

interface应该是一个显而易见的答案:只要两个包都提出具有一组通用功能的接口(interface),它就允许:

  • packageB 使用来自A 的函数(import A)
  • packageAB 调用函数而无需 import B:所有需要传递给 B实现 A 中定义的接口(interface)的实例:这些实例将被视为 A 对象。
    从这个意义上讲,packageA 忽略了 packageB 的存在。

这在“Cyclic dependencies and interfaces in golang”的评论中也有说明。

If package X accepts/stores/calls methods on/returns types defined package Y, but doesn't actually access Y's (non-method) functions or variables directly, X can use an interface that the type in Y satisfies rather than actually importing Y.

avoiding dependencies with interfaces in general, you can see how, say, the io module doesn't depend on os for the File class even though its functions can work on Files. (It just defines io.Writer, etc., and *os.File satisfies those interfaces.)

例如,io 在其 Copy() function 中接受一个 'Writer' (可以是文件或其他知道如何写的文件),并完全忽略 os(.File)

关于import - "Mutual"Golang 包导入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24526484/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com