【Golang】Go的GOROOT,GOPATH,GOBIN和工程project目录结构
使用go env 命令,可以打印出Go的配置
GOROOT
其实就是golang 的安装路径
当你安装好golang之后其实这个就已经有了
GOPATH
go命令依赖的一个重要环境变量:$GOPATH
其实可以把这个目录理解为工作目录,我个人定义的目录是:
GOPATH="/Users/zhaofan/go_project"
当然这个目录是需要添加到环境变量中的
vim /etc/profile
(根据实际路径修改下面的语句)添加在/etc/profile 之后
export GOROOT=/goland/go
export GOPATH=/goland/workspace
go_project // (go_project为GOPATH目录)
-- bin // golang编译可执行文件存放路径
-- pkg // golang编译包时,生成的.a文件存放路径
-- src // 源码路径。按照golang默认约定,go run,go install等命令的当前工作路径(即在此路径下执行上述命令)。
GOBIN
在*.go 所在目录执行go install后生产的可执行文件存放的路径
首先先看一下我的目录结构:
我们通常是在go_project目录下执行go build,例如:
go文件路径是:
/Users/zhaofan/go_project/src/go_dev/01/hello/hello.go
我们现在要编译hello.go文件,我只需要切换到/Users/zhaofan/go_project目录中,然后执行:
go build go_dev/01/hello
golang 会自动去src下找hello目录,因为我的hello.go中代码的开头添加了packag main,所以可以编译成可执行文件,但是这样默认是在当前目录下生成可执行文件,虽然可以指定目录,但是还是感觉不是非常方便
所以还有两个非常好用的命令:go get 和go install
go get
go get会做两件事:
1. 从远程下载需要用到的包
2. 执行go install
go install
go install 会生成可执行文件直接放到bin目录下,当然这是有前提的
你编译的是可执行文件,如果是一个普通的包,会被编译生成到pkg目录下该文件是.a结尾
关于go的整体一个开发目录
go_project // go_project为GOPATH目录
-- bin
-- myApp1 // 编译生成
-- myApp2 // 编译生成
-- myApp3 // 编译生成
-- pkg
-- src
-- myApp1 // project1
-- models
-- controllers
-- others
-- main.go
-- myApp2 // project2
-- models
-- controllers
-- others
-- main.go
-- myApp3 // project3
-- models
-- controllers
-- others
-- main.go
go命令依赖一个重要的环境变量:$GOPATH
GOPATH允许多个目录,当有多个目录时,请注意分隔符,多个目录的时候Windows是分号;
当有多个GOPATH时默认将go get获取的包存放在第一个目录下
$GOPATH目录约定有三个子目录
src存放源代码(比如:.go .c .h .s等) 按照golang默认约定,go run,go install等命令的当前工作路径(即在此路径下执行上述命令)。
pkg编译时生成的中间文件(比如:.a) golang编译包时
bin编译后生成的可执行文件(为了方便,可以把此目录加入到 $PATH 变量中,如果有多个gopath,那么使用${GOPATH//://bin:}/bin添加所有的bin目录)
代码目录结构规划
GOPATH下的src目录就是接下来开发程序的主要目录,所有的源码都是放在这个目录下面,那么一般我们的做法就是一个目录一个项目,
例如: $GOPATH/src/mymath 表示mymath这个应用包或者可执行应用,这个根据package是main还是其他来决定,main的话就是可执行应用,其他的话就是应用包,这个会在后续详细介绍package。
链接:https://www.jianshu.com/p/eea2dac12bce
govendor 管理包
安装govendor (略)
进入src的项目目录中,入,执行初始化 govendor init ,生成vendor目录
下载包,在myApp1中,也就是(vendor的父目录),执行govendor fetch 包地址(如govendor fetch github.com/ClickHouse/clickhouse-go)
简单的解决GOROOT和GOPATH的方法