module - 模块化代码在 Go 中是如何工作的?

标签 module compilation package projects-and-solutions go

我没有 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 中模块化您的代码、这样做的正确项目结构以及编译过程是如何工作的吗?

最佳答案

维基答案,请随意添加/编辑。

模块化

  1. 同一个包中的多个文件

    • 听起来就是这样。同一个目录中的一堆文件都以相同的package <name>开头指令意味着它们被 Go 视为一大组代码。您可以透明地调用 a.go 中的函数来自 b.go .这主要是为了代码组织的好处。
    • 一个虚构的例子是一个“博客”包,其布局可能是 blog.go (主文件),entry.go , 和 server.go .由你决定。虽然您可以在一个大文件中编写博客包,但这往往会影响可读性。
  2. 多个包

    • 标准库就是这样完成的。基本上,您创建模块并选择将它们安装到 $GOROOT .你写的任何程序都可以import "<name>"然后调用<name>.someFunction()
    • 实际上,任何独立或共享的组件都应该编译成包。回到上面的博客包,如果要添加新闻提要,可以将 server.go 重构为一个包。然后两个blog.gonews.go两者都会import "server" .

编译

我目前将 gomake 与 Makefile 一起使用。 Go 安装附带了一些很棒的 make 包含文件,可以简化包或命令的创建。这并不难,掌握这些内容的最佳方法是查看来自开源项目的示例 makefile 并阅读 "How to Write Go Code" .

关于module - 模块化代码在 Go 中是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7221463/

相关文章:

reactjs - 无法解析模块...急速模块图中不存在

java - 如何将第三方Java库编译成我可以使用的jar文件?

python - 导入库无法与 exec 函数一起使用?

Python 看不到我的子包

python 3 : Good location(s) to install own and 3rd party packages?

java - 如何创建多 war war 模块?

arrays - 将大值传递给模块

c++ - 为什么我在头文件中定义 `const int`时没有重复定义错误?

linux - 在 .deb 安装程序完成后向用户显示说明

zend-framework - Zend Module Bootstrap 不加载