gpt4 book ai didi

go - 从单独的文件夹加载模型时如何解决 `import cycle not allowed`

转载 作者:数据小太阳 更新时间:2023-10-29 03:18:38 27 4
gpt4 key购买 nike

我打算模块化我的项目,但我遇到了一些问题。

通常,我会将所有模型文件放在同一个包models中(同一个文件夹,大约30个文件),但现在我想将它们放在单独的文件夹中以便于管理(每个模块都会有自己的模型文件夹)。

但是如果我尝试将模型放在单独的文件夹中,就像这张图片中那样,我会得到“导入周期错误”,因为它们不是同一个包(两个表将用于相互查找,这就是错误发生的地方).

https://i.imgur.com/3wqJ4BK.png

那么有没有将模型放在单独的文件夹中或更好的管理模型的方法?

最佳答案

我不确定这是不是一个好策略。但如果我遇到你的情况,我会尝试通过以下方法解决它。

enter image description here

假设我们有两个包 package apackage b

package a

import ".../code/module2"

var StrA="Hi! I'm A and I'm calling B: "

func FuncA() string {
return "Inside A"
}

func AtoB() {
fmt.Println(StrA+b.FuncB())
}

package b

import ".../code/module1"

var StrB="Hi! I'm B and I'm calling A: "

func FuncB() string {
return "Inside B"
}

func BtoA() {
fmt.Println(StrB+a.FuncA())
}

您不能使用函数 AtoB()BtoA(),因为它们会形成循环。一种可能的解决方法是在每个模块内创建子目录。移动那些使循环的代码部分。像这里的 AtoB()BtoA()

enter image description here

extraA.go 中:

package extended

import (
"fmt"
. ".../code/module1"
b ".../code/module2"
)
func AtoB() {
fmt.Println(StrA+b.FuncB())
}

我使用 . 导入了 package a,这样我就可以在本地使用 a 的对象并导入了 package b 调用 FuncB()。我还将 BtoA() 移动到 module2 中的另一个子目录。

现在我可以在不进行任何循环的情况下使用这两个函数。

package main

import (
extraA ".../code/module1/extended"
extraB ".../code/module2/extended"
)

func main() {
extraA.AtoB()
extraB.BtoA()
}

输出:

Hi! I'm A and I'm calling B: Inside B
Hi! I'm B and I'm calling A: Inside A

关于go - 从单独的文件夹加载模型时如何解决 `import cycle not allowed`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57319335/

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