【发布时间】:2014-05-24 09:09:38
【问题描述】:
我想知道是否有一种方法可以像 Python 一样在 Go 语言中使用命名空间。
在 Python 中,如果我有以下包含函数的文件:
/a.py
def foo():
/b.py
def bar():
我可以在第三个 Python 文件中访问 foo 和 bar,如下所示:
import a
a1 = a.foo()
import b
b1 = b.bar()
我很难找到一些关于 Go 语言命名空间的文档。
Go 中的命名空间是如何实现的?使用package 和import?还是import 专用于外部库?
我想我理解每个包都应该有一个专用目录。我想知道这是否是绝对强制性的,因为只要高粒度的模块是设计某个想法的最佳方式,它就会变得不切实际。换句话说,我想避免每个包使用一个目录(供内部使用)。
【问题讨论】:
-
它的工作原理基本相同。如果你导入一个包 foo 并且 foo 导出一些 Bar,你可以像
foo.Bar()一样访问它。我认为 golang.org 上的文档在这方面非常清楚。你错过了什么? -
我想我明白每个包都应该有一个专用目录。我想知道这是否是绝对强制性的,因为只要高粒度的模块是设计某个想法的最佳方式,它就会变得不切实际
-
当前实现要求包的所有源文件都位于同一目录中。
-
是的! “一个目录一个包”有什么复杂的?这很简单,没有“但是”,没有“也许”,没有“怎么样”,每个目录只有一个包。
-
这绝对不复杂,只是闻起来像过度冗余,特别是如果我想每个包只有一个文件。 Go 中真的没有更轻量级的“命名空间”概念吗?
标签: module namespaces go package