本文最初发表在我的个人博客,欢迎查看原文:
blog.favorstack.io/golang
概览
- Go程序员通常会将所有Go代码保存在一个工作区中。
- 工作空间可以包含多个版本控制仓库(比如,Git仓库)。
- 每个仓库可以包含一个或多个包。
- 每个包由一个目录中的一个或多个Go源文件组成。
- 包目录的的路径决定了其导入路径。
使用过Eclipse的同学可能觉得这跟Eclipse的工作空间有点像,但是跟Idea反差就很大。
工作空间(workspace)
Go的工作空间就是一个目录层次结构,其根目录下主要有以下几个子目录:
src
包含Go的源代码文件bin
包含可执行命令文件pkg
包含安装包的对象,按系统架构区分子目录
src
子目录通常包含多个版本控制仓库(比如git或hg),来追踪一个或多个源代码包的开发。该目录同样定义了导入路径或可执行命令的名称。
pkg
保存安装包的对象,在pkg下,每个目标操作系统和系统架构对都有自己的子目录(pkg/GOOS_GOARCH)。
假设工作空间路径为MyDIR
,在MyDIR/src/foo/bar
中包含源代码的包,可以导入为"foo/bar"
,并将其编译形式安装到"MyDIR/pkg/GOOS_GOARCH/foo/bar.a"
。
bin
目录保存已编译好的命令(可执行文件)。每个命令(可执行文件)都以其源目录命名,但仅以最后一个元素(包)命名,而不是整个路径。也就是说,源代码在MyDIR/src/foo/hello
下的命令,会被安装到MyDIR/bin/hello
,而不是MyDIR/bin/foo/hello
。去掉了"foo/"
前缀,以便可以将MyDIR/bin
添加到PATH
来获取已安装的命令。如果设置了GOBIN
环境变量,则命令将安装到它命名的目录,而不是MyDIR/bin
。注意,GOBIN
必须是绝对路径。
go tool构建二进制文件并将其默认安装到bin目录。
下面是一个Go工作空间常见的例子:
bin/