go語言學習之開發工具使用(二)

go的文件系統

GOROOT 目的是設置go的安裝位置,編譯時從GOROOT去找SDK的system library。

GOPATH 必須有以下三個目錄:

  • src:存放源代碼的目錄,比如 .go ,.h,.c
  • pkg:編譯後生成的文件,比如 .a 文件,go install後會在該目錄生成一個 .a 文件。
  • bin:編譯後生成的可執行文件。

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等。

go 項目空間

在第一節中介紹了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"

### go開發利器goland使用

> 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: [email protected]
  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的開發之旅。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章