多个文件包如何在golang中运行?

pym*_*ymd 12 flow package go

这个 repo有3个go文件都以"package lumber"开头.要使用这个包,我应该把它放在我的GOROOT简单

import lumber
Run Code Online (Sandbox Code Playgroud)

在我的程序中.此包中的变量和类型如何跨多个文件相互连接?go编译器如何知道首先要读取哪个文件?

如果我想阅读包,我应该在哪里开始阅读以了解包装?这里的事情到底是什么?

jim*_*imt 23

详细说明jnml的答案:

import "foo/bar"在代码中使用时,不是指源文件(位于其中$GOPATH/src/foo/bar/).

相反,您指的是一个已编译的包文件$GOPATH/pkg/$GOOS_$GOARCH/foo/bar.a.当您构建自己的代码,并且编译器发现该foo/bar软件包尚未编译(或已过期)时,它将自动为您执行此操作.

它通过整理$GOPATH/src/foo/bar目录中的所有相关源文件并将它们构建到单个bar.a文件中来完成此操作,该文件将安装在pkg目录中.然后使用您自己的程序继续编译.

对于所有导入的包以及由它们导入的包重复此过程,一直到依赖关系链.

*)如何整理文件,取决于文件本身的命名方式以及文件内部存在的构建标记类型.

要深入了解其工作原理,请参阅构建文档.


zzz*_*zzz 15

不,你不应该"把它放在我的GOROOT"中.你应该执行

$ go get github.com/jcelliott/lumber
Run Code Online (Sandbox Code Playgroud)

这将克隆存储库$GOPATH/src/github.com/jcelliott/lumber.然后,您可以通过在代码中将其导入来使用该包

import "github.com/jcelliott/lumber"
Run Code Online (Sandbox Code Playgroud)

关于范围规则:声明和范围