GOROOT
目的是设置go的安装位置,编译时从GOROOT去找SDK的system library。
GOPATH 必须有以下三个目录:
.go
,.h
,.c
。.a
文件,go install
后会在该目录生成一个 .a
文件。Go编译时会从$GOPATH/src
目录查找需要的代码。
当项目需要依赖外部依赖包,go直接通过GOPATH
进行管理。go允许import
不同代码库的代码,比如 github.com
,对于需要 import
的代码,可以使用 go get
命令取下来存放到GOPATH对应的目录中去,比如 $GOPATH/src/github.com
下。
因此,对于go来说,并不关心代码是内部的还是外部的,都是从GOPATH
获取,任何需要import
的包路径都从GOPATH
开始。唯一的区别就是,内部依赖的包是项目开发者自己写的,外部依赖包是通过 go get
下来的。
Vendor
vendor是项目文件系统中一个用来存放第三方包的目录,它的作用让go编译时,优先从vendor目录中查找代码如果vendor
中有,则不再去GOPATH中找。
要把项目所有的依赖包都拷贝到vendor
目录,这样就可以解决下文中提到的全局GOPATH项目空间中第三方包多版本的问题。后文将对go语言中的包管理工具进行展开。go常用的包管理工具有官方的dep
以及非官方的glide
等。
在第一节中介绍了GOPATH,一个项目存在GOPATH目录的下的src目录中,那么怎么管理这个src中项目。这就出现了两种项目文件组织结构
多项目GOPATH集中管理
这种组织形式就是配置全局的GOPATH,在其空间下,建立三个目录,src,bin,pkg,在src项目结构下,建立多个program.
这种方式会导致在引用第三方包,版本不兼容。针对这种问题,在后文中会介绍一种新的方法来解决该问题。
单项目GOPATH独立管理
这种组织形式就是每个项目独立的配置一个GOPATH,保证了workspace的文件形式的独立性。GOPATH直接针对项目设置,在项目空间下,建立src,pkg,bin,三个目录,在src中进行源码的编写。
这种方式,实际上是一种动态的GOPATH环境变量配置。goland编辑器可以支持这种代码组织形式。在创建项目时,需要配置项目级的GOPATH。后文会有具体的设置方式。
在来看下,怎么通过脚本动态的管理GOPATH
CURDIR=`pwd`
OLDGOPATH="$GOPATH"
export GOPATH="$CURDIR"
Goland是由JetBrains公司旨在为go开发者提供的一个符合人体工程学的新的商业IDE.
来看一下,怎么通过项目GOPATH打造项目开发空间
第一步:创建项目
第二步:配置项目GOPATH
第三步:运行测试
glide安装
$ go get github.com/Masterminds/glide
$ go install github.com/Masterminds/glide
使用说明
$cd $GOPATH/src/program
$glide init
$ ll
glide.yaml
$ cat glide.yaml
package: foor
import: []
完整的glide.yaml
package: foor
homepage: https://github.com/qiangmzsx
license: MIT
owners:
- name: qiangmzsx
email: qiangmzsx@hotmail.com
homepage: https://github.com/qiangmzsx
# 去除包
ignore:
- appengine
- golang.org/x/net
# 排除目录
excludeDirs:
- node_modules
# 导入包
import:
- package: github.com/astaxie/beego
version: 1.8.0
- package: github.com/coocood/freecache
- package: github.com/garyburd/redigo/redis
- package: github.com/go-sql-driver/mysql
- package: github.com/bitly/go-simplejson
- package: git.oschina.net/qiangmzsx/beegofreecache
testImport:
- package: github.com/smartystreets/goconvey
subpackages:
- convey
安装依赖
$glide install
$ ll
total 12
glide.lock
glide.yaml
vendor
glide get
最后在来个glide get命令,和go get具有相同的用法,掌握这些知识,就可以像npm一样使用glide了。
本篇内容,通过四大板块,对go语言的文件系统做了介绍,掌握这些知识,就可以开启go的开发之旅。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。