GOPATH与工作区

290 阅读1分钟

🌱 一、什么是 GOPATH

你可以把 GOPATH 理解为一个「专属的 Go 项目大本营」,Go 会在这个目录下组织你的代码、依赖包、编译产物等。

GOPATH 的默认值(如果你没设置):

  • Linux/macOS: $HOME/go
  • Windows: %USERPROFILE%\go

📁 二、GOPATH 工作区结构

GOPATH 目录下有三个标准子目录:

GOPATH/
├── src/    # 你写的代码 (source)
├── pkg/    # 编译后的中间文件
└── bin/    # 可执行文件(go install 后的产物)

比如:

$HOME/go/src/github.com/yourname/yourproject

你写的项目一般放在 src 下;执行 go install 后,生成的二进制就会出现在 bin 目录下。

🧰 三、举个例子(GOPATH 时代)

假设你写了个小项目:

mkdir -p $HOME/go/src/hello
cd $HOME/go/src/hello
vim main.go
// main.go
package main

import "fmt"

func main() {
    fmt.Println("Hello, GOPATH!")
}

然后运行:

go run main.go

或者:

go install
$HOME/go/bin/hello  # 执行编译好的二进制

🧱 四、GOPATH 时代的痛点

  1. 只能在 GOPATH/src 下写代码,否则 go getgo install 报错。
  2. 依赖管理麻烦,需要手动 go get,版本不可控。
  3. 很多团队共享 GOPATH,容易污染(多个项目依赖不同版本的库)。

🧠 五、Go Modules 的出现

Go 1.11 引入了 Go Modules(模块化构建系统),从 Go 1.13 起正式推荐使用。从此以后你可以完全脱离 GOPATH 工作

使用 Go Modules:

mkdir /anywhere/you/like/project
cd project
go mod init github.com/yourname/project

你可以在任何路径下写代码,不需要放进 GOPATH 里。

项目GOPATHGo Modules
写代码的位置必须在 GOPATH/src任意目录
依赖管理依赖共享,全局缓存,版本不可控独立 go.mod,依赖版本可控
推荐程度不推荐使用(仅旧代码或特殊场景)推荐使用(默认支持)
您说:

我理解Gopath就是需要在这个目录下才能进行go开发,但是go Modules 可以在任意地方进行go开发,然后通过go get安装的内容会安装到GOMODCACHE目录下,项目会自动引入对应的依赖。