什么是 go path

下面摘自官方定义

GOPATH 环境变量指定了你的工作空间位置。它或许是你在开发Go代码时, 唯一需要设置的环境变量。

Go代码必须放在工作空间内。它其实就是一个目录,其中包含三个子目录:

  • src 目录包含Go的源文件,它们被组织成包(每个目录都对应一个包),
  • pkg 目录包含包对象,
  • bin 目录包含可执行命令。

go 工具用于构建源码包,并将其生成的二进制文件安装到 pkgbin 目录中。src 子目录通常包会含多种版本控制的代码仓库(例如Git或Mercurial), 以此来跟踪一个或多个源码包的开发

总结一下官方的描述重点:

  • 所有Go代码必须放在GoPath中
  • src包含所有源代码,pkg包含编译后的包文件(go中后缀为.a,java中为.jar),bin包含编译后的可执行文件(go中根据平台不一样后缀不一样,java中所有平台都为.jar)

为什么Java项目放在任何路径都可以正常编译呢?

Java中有一个类似GOPATH的参数classpath,它是Java运行时环境搜索类和其他资源文件(比如jar\zip等资源) 的路径。

classpath默认为jdk的相关目录(lib)和当前目录。java程序编译和运行时,都可以指定classpath。我们之所以感觉java项目可以任意目录执行,是因为idea、maven这些工具帮我们指定好了运行时依赖的classpath路径。

参考资料