作者热门文章
- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
This repo 有 3 个 go 文件,都以“package lumber”开头。要使用这个包,我应该把它放在我的 GOROOT
中,然后简单地
import lumber
在我的程序中。这个包中的变量和类型如何跨多个文件相互连接? go 编译器如何知道首先开始读取哪个文件?
如果我想阅读包,我应该从哪里开始阅读以了解包?这里的具体流程是什么?
最佳答案
详细说明jnml的答案:
当您在代码中使用 import "foo/bar"
时,您并没有引用源文件(位于 $GOPATH/src/foo/bar/
)。
相反,您指的是位于 $GOPATH/pkg/$GOOS_$GOARCH/foo/bar.a
的编译包文件。当您构建自己的代码时,编译器发现 foo/bar
包尚未编译(或已过期),它会自动为您执行此操作。
它通过整理* $GOPATH/src/foo/bar
目录中的所有相关源文件并将它们构建到单个 bar.a
文件中来做到这一点,它安装在 pkg 目录中。然后用您自己的程序继续编译。
对所有导入的包以及由这些包导入的包都重复此过程,一直沿依赖链向下。
*) 文件的整理方式取决于文件本身的命名方式以及其中存在的构建标签类型。
要更深入地了解其工作原理,请参阅 build docs .
关于go - 带有多个文件的包如何在 golang 中工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16933094/
我是一名优秀的程序员,十分优秀!