【发布时间】:2011-11-05 11:51:09
【问题描述】:
我没有 C/编译语言背景,我发现很难掌握使用 Go 的包机制来创建模块化代码。
在 Python 中,导入一个模块并访问它的函数等等,这是一个简单的例子
import foo
其中 foo.py 是您要在同一目录中导入的模块的名称。否则,您可以将空的__init__.py 添加到子文件夹中并通过
from subfolder import foo
然后您可以通过简单地通过模块名称引用函数来访问函数,例如y = foo.bar(y)。这使得将逻辑代码段彼此分离变得很容易。
然而,在 Go 中,您在源文件本身中指定包名,例如
package foo
在 'foo' 模块的顶部,然后你可以通过它导入
import (
"foo"
)
然后通过它来引用它,即y := foo.Bar(x)。但我无法理解的是这在实践中是如何工作的。 golang.org 上的相关文档看起来很简洁,并且针对的是具有更多(任何)使用 makefile 和编译器经验的人。
有人能清楚地解释一下您打算如何在 Go 中模块化您的代码、这样做的正确项目结构以及编译过程是如何工作的吗?
【问题讨论】:
-
我将回复一个指向示例存储库的链接,该链接显示了这个漏洞交易。 github.com/jteeuwen/go-example-multipkg希望能有所帮助。为我的 github thingy 的无耻的自我插件道歉,但这比在 SO 上复制它更好。
-
对于 Go 模块(Go 1.11 中的新功能),许多相同的答案仍然适用,但这个 answer 更多地涵盖了 Go 模块的这个问题。
标签: module compilation packages projects-and-solutions go