当前位置: 首页 > 面试题库 >

在Go中跨包访问变量

穆宏胜
2023-03-14
问题内容

我有两个变量,范围package main是:

var (
    app Application
    cfg Config
)

现在,由于我的应用程序的大小开始增加,因此我决定将网站的每个模块放入其自己的程序包中,就像子目录一样:

/src/github.com/Adel92/Sophie
  + user/   (package user)
     - register.go
     - login.go
     - password.go
  + topic/  (package topic)
     - ... etc
  - main.go (package main)

我该如何解决从其他软件包访问appcfg全局变量的问题?这是错误的做法吗?我有一种感觉。

在这种情况下,我怎么会在声明自己的命名空间功能,所以我没有发疯具有固定其名称usertopic所有的时间。


问题答案:

大写的变量名导出为其他包访问,因此AppCfg会工作。但是,一般不建议使用子包进行名称间隔。软件包旨在用于离散的独立功能,因此通常比使用这种方法要麻烦得多(例如,导入周期是绝对不可能的,因此,如果在此布局中有两个子软件包需要与之通信对方,那么您就不走运了。

如果你发现你需要前缀事情user,并topic为了避免名称冲突,那么也许下面的概念应被纳入了自己的包,您可以创建它的一个实例user,一个用于topic



 类似资料:
  • 问题内容: Go 1.7 beta 1今天早上发布,这是Go 1.7的发行说明草案 。新功能已添加到程序包中。的文档给出了一个示例: 的文档还给出了以下解释: 例如,如果p指向包含文件描述符d的结构,并且p具有关闭该文件描述符的终结器,并且函数中对p的最后使用是对syscall的调用。Write(pd,buf,size ),则一旦程序进入syscall.Write,p可能无法访问。终结器可能会在此

  • 问题内容: 我正在试用Go的新模块系统,无法访问本地软件包。以下项目位于我的gopath外的桌面上的文件夹中。 我的项目结构如下: 告诉我 问题答案: 我强烈建议您使用go工具链,它可以解决这些问题。带vscode-go插件的Visual Studio Code非常有用。 这里的问题是Go需要相对于您或import语句的相对路径。根据您所在的位置,导入路径也应包括该位置。在这种情况下,import

  • 问题内容: 我有一个main.go文件,其中有: 在我要声明,可在我的应用程序的任何地方访问的全局变量。有可能吗?我试过了: 但是,即使在同一包中,我也无法访问变量。 问题答案: 在顶层声明变量-在任何函数之外: 由于变量的名称以大写字母开头,因此在导入定义变量的包并使用包名对其进行限定时,变量将在当前包中通过其名称可用-在任何其他包中都可用。 这是另一个示例(同样在Go游乐场中:https :

  • 问题内容: 我想了解以下示例中的情况(通过包从子类外部访问受保护的成员)。 我知道对于包外部的类,子类只能通过继承才能看到受保护的成员。 有两个包:和。 : : : 可以理解,中的方法可以访问,因为受保护的成员只能通过继承来访问。 我的问题是,为什么是方法,通过在基准访问时,工作正常的方法 ,但 将无法正常工作 通过访问时的参考? 问题答案: 该类中的代码被允许通过type的引用访问受保护的成员。

  • 问题 你想要扩展函数中的某个闭包,允许它能访问和修改函数的内部变量。 解决方案 通常来讲,闭包的内部变量对于外界来讲是完全隐藏的。 但是,你可以通过编写访问函数并将其作为函数属性绑定到闭包上来实现这个目的。例如: def sample(): n = 0 # Closure function def func(): print('n=', n) #

  • 问题内容: 我正在使用Java和TestNG框架为我的公司编写一些selenium自动UI测试。我正在类中定义驱动程序,并且我想在中实际初始化驱动程序并在方法中退出它。假设它们在不同的类中,Java的实现方式是什么?我知道如何使它在同一个类中工作,但不能在单独的类中工作。这是我的文件: 现在,我想拥有一个单独的Setup类和一个Teardown类。如果我要用相同的方式定义所有这些,则可以这样进行: