pet*_*rSO 11
该pkg目录包含从src目录Go源代码包编译的Go包对象,然后在链接时使用它来在bin目录中创建完整的Go可执行二进制文件.
我们可以编译一次包,但将该对象链接到许多可执行文件中.例如,该fmt程序包几乎出现在每个Go程序中.它编译一次但链接了很多次,节省了很多.
kya*_*kya 11
~/go/pkg从如何编写Go代码,我们知道~/go/pkg可以存储第三方库。例如:
main.go并go.mod://main.go
package main
import (
"fmt"
"github.com/google/go-cmp/cmp"
)
func main() {
fmt.Println(cmp.Diff("Hello World", "Hello Go"))
}
Run Code Online (Sandbox Code Playgroud)
//go.mod
module example.com/user/hello
go 1.13
Run Code Online (Sandbox Code Playgroud)
$ ls ~/go/pkg/mod/github.com/google/
...
$ go install example.com/user/hello
go: finding github.com/google/go-cmp v0.5.2
go: downloading github.com/google/go-cmp v0.5.2
go: extracting github.com/google/go-cmp v0.5.2
$ ls ~/go/pkg/mod/github.com/google/
... go-cmp@v0.5.2
$ ls ~/go/pkg/mod/github.com/google/go-cmp@v0.5.2
Run Code Online (Sandbox Code Playgroud)
然后,你会看到很多go文件,而不是编译文件。
$ ls ~/go/pkg/mod/github.com/google/go-cmp@v0.5.2/cmp/
... example_test.go options.go ...
Run Code Online (Sandbox Code Playgroud)
pkg在用户项目中这pkg是用户项目的目录/包。您可以将其视为库,并且可以供外部应用程序使用。更多内容,您可以查看这里。
您将源代码放在src目录中,而pkg目录是保存实际源代码编译输出的目录。如果您使用多个库/包.a,每个库/包都会有不同的输出和扩展名,Alinker应负责将所有库/包链接和组合在一起,以在bin目录中生成一个最终可执行文件。
由于pkg和bin更具体到您构建实际源代码的机器或操作系统,因此不建议共享它们,您的存储库应仅包含您的实际代码。
附带说明,如果您打算使用 docker 容器,则pkgdir 应该被忽略,因为我们可能会在windows例如将import/mount您的代码放入linux容器时构建源代码;这时候pkg会有编译后的文件只对windows
| 归档时间: |
|
| 查看次数: |
3995 次 |
| 最近记录: |