我对golang的理解,链接和连接第三方库的系统有些难以理解。由于某种原因只能连接github,或者我没搞清楚。仍然到处都有一些关于包和模块的被破坏的术语。请解释什么是什么以及为什么需要它、链接的区别以及是否可以连接不是来自 github 的东西?请附上您的俄语来源。英语文学相当多,但一切似乎都与俄语翻译有些混乱。
我对golang的理解,链接和连接第三方库的系统有些难以理解。由于某种原因只能连接github,或者我没搞清楚。仍然到处都有一些关于包和模块的被破坏的术语。请解释什么是什么以及为什么需要它、链接的区别以及是否可以连接不是来自 github 的东西?请附上您的俄语来源。英语文学相当多,但一切似乎都与俄语翻译有些混乱。
模块是一个包树。模块名称设置在
go.mod
包是位于同一目录中且具有相同 .go 指令的一组源 .go 文件
package
。一个包的文件必须位于同一目录中。包的全名是根据模块名称和包含文件的目录的路径构建的。例如,
go.mod
书面形式module example.org/mylib
,example.org/mylib
应该位于相对于go.mod
.例如,在您的库的源代码树中,有
./cmd/root
. 那么这些文件必须带有指令package root
或package root_test
. 这些文件的完整包名称将是example.org/mylib/cmd/root
, 或example.org/mylib/cmd/root_test
[1]。为了在 Google 中自动搜索包,他们提出了goproxy 协议。它 在 GitHub 中实现,因此放置在那里的任何模块都会被命令自动找到
go get
,等等。go mod tidy
go build
但没有人限制你只能使用 github。例如,GitLab 提供了 goproxy 支持。您在服务器上部署 gitlab,设置域和代理 - 就完成了,
go get
它开始查找具有您域名的模块。最坏的情况是,您可以在文件系统中部署第三方模块的源代码,并
go.mod
使用以下命令编写依赖项replace
:在这种情况下
go build
,它根本不会上网,而是example.org/some/module
从目录中获取模块的源代码../some_module_src
[1] 包
example.org/mylib/cmd/root_test
必须包含包的测试example.org/mylib/cmd/root