go语言每个工程是不是都要单独设置GOPATH?

go语言每个工程是不是都要单独设置GOPATH?
比如我的go项目都统一管理在d:/workspace/go_work/目录下面,该目录下有3个项目project_01,project_02,project_03

d:/workspace/go_work/project_01
d:/workspace/go_work/project_02
d:/workspace/go_work/project_03

问题:
1、我的GOPATH是不是要设置3个,用分号隔开?像下面这样:

d:/workspace/go_work/project_01;d:/workspace/go_work/project_02;d:/workspace/go_work/project_03

2、有100个项目是不是就要在GOPATH中添加100个?

阅读 9.8k
7 个回答

你可以选择设置多个,既一个项目一个gopath
或者设置一个gopath来下包含多个项目,就如楼上所说

不是呀, 直接设置 GOPATH=d:/workspace/go_work

可以就设置一个, 如果工程里需要引入别的包可以用 vendor 这个功能啊

GOPATH下有bin pkg src三个目录
1.你的project_01可以放在src的目录下,这样就不需要每次设置了
2.你的project_01放在任意位置,只要不在GOPATH下,使用go mod,前提是你的go版本是1.11

不用,所有项目可以只设一个gopath,也可以分开为每个项目设为不同的gopath.

不是,一个系统上(一个用户)只有一个gopath。

gopath/src/ 项目应该放在这里。
gopath/pkg/由go管理,存一些中间编译结果。
gopath/bin/ 用于存放软件程序,go install会将项目编译后复制到此处,然后便可以命令行直接调用。

未来go版本随着gomodule的使用,gopath即将废弃,项目不再依赖于gopath。

1个GOPATH就可以了,然后许多项目都在里面,比如我的是这样:


➜  go echo $GOPATH
/Users/xxxx/go

➜  go tree -L 2 $GOPATH
.
├── bin
│   ├── bee
│   ├── beeHello
│   ├── cobra
│   ├── dlv
│   ├── fillstruct
│   ├── geth
│   ├── geth-tps
│   ├── glide
│   ├── go-outline
│   ├── go-symbols
│   ├── gocode
│   ├── goconvey
│   ├── godef
│   ├── godoc
│   ├── golint
│   ├── gomodifytags
│   ├── gopkgs
│   ├── goplay
│   ├── gorename
│   ├── goreturns
│   ├── gotests
│   ├── govendor
│   ├── guru
│   ├── hi
│   ├── impl
│   ├── puppeth
│   └── rlpdump
├── pkg
│   └── darwin_amd64
└── src
    ├── awesomeProject
    ├── beeHello
    ├── github.com
    ├── golang.org
    ├── gopkg.in
    ├── govendor
    └── sourcegraph.com
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题