登录
首页 >  Golang >  Go问答

从单独的文件夹加载模型时如何解决“不允许导入周期”的问题

来源:stackoverflow

时间:2024-03-30 13:48:33 293浏览 收藏

小伙伴们对Golang编程感兴趣吗?是否正在学习相关知识点?如果是,那么本文《从单独的文件夹加载模型时如何解决“不允许导入周期”的问题》,就很适合你,本篇文章讲解的知识点主要包括。在之后的文章中也会多多分享相关知识点,希望对大家的知识积累有所帮助!

问题内容

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

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

但是,如果我尝试将模型放入单独的文件夹中,如下图所示,我将收到“导入循环错误”,因为它们不是同一个包(将使用两个表相互查找,这就是发生错误的地方)。

https://i.stack.imgur.com/i7Hhr.png

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


解决方案


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

假设我们有两个包 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()

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

本篇关于《从单独的文件夹加载模型时如何解决“不允许导入周期”的问题》的介绍就到此结束啦,但是学无止境,想要了解学习更多关于Golang的相关知识,请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>