GOPATH與工作空間
GOPATH設置go 命令依賴一個重要的環境變量:$GOPATH1
(注:這個不是Go安裝目錄。下麵以筆者的工作目錄為說明,請替換自己機器上的工作目錄。)
在類似 Unix 環境大概這樣設置:
1
|
export
GOPATH = / home / apple / mygo
|
Windows 設置如下,新建一個環境變量名稱叫做GOPATH:
1
|
GOPATH = c : \mygo
|
GOPATH允許多個目錄,當有多個目錄時,請注意分隔符,多個目錄的時候Windows是分號,Linux係統是冒號,當有多個GOPATH時,默認會將go get的內容放在第一個目錄下
-
[AppleScript] 純文本查看 複製代碼1234
以上 $GOPATH 目錄約定有三個子目錄:
src 存放源代碼(比如:.go .c .h .s等)
pkg 編譯後生成的文件(比如:.a)
bin 編譯後生成的可執行文件(為了方便,可以把此目錄加入到 $PATH 變量中)
以後我所有的例子都是以mygo作為我的gopath目錄
應用目錄結構
1
|
建立包和目錄:$GOPATH / src / mymath / sqrt.go(包名: "mymath" )
|
以後自己新建應用或者一個代碼包都是在src目錄下新建一個文件夾,文件夾名稱一般是代碼包名稱,當然也允許多級目錄,例如在src下麵新建了目錄
1
|
$GOPATH / src / github.com / astaxie / beedb
|
1
|
“github.com / astaxie / beedb”,
|
執行如下代碼
1
|
cd
$GOPATH / src
mkdir mymath
|
新建文件sqrt.go,內容如下
1
2
3
4
5
6
7
8
|
/ / $GOPATH / src / mymath / sqrt.go源碼如下:
package
mymath
unc
Sqrt ( x
float 64 ) float 64 { z : = 0.0 for i
: = 0 ;
i < 1000 ;
i + + { z - = ( z * z - x ) /
( 2 *
x ) } return
z
}
|
這樣我的應用包目錄和代碼已經新建完畢,注意:一般建議package的名稱和目錄名保持一致
編譯應用上麵我們已經建立了自己的應用包,如何進行編譯安裝呢?有兩種方式可以進行安裝
1、隻要進入對應的應用包目錄,然後執行go install,就可以安裝了
2、在任意的目錄執行如下代碼go install mymath
安裝完之後,我們可以進入如下目錄
1
2
3
|
cd
$GOPATH / pkg / $ { GOOS } _$ { GOARCH }
/ / 可以看到如下文件
mymath.a
|
這個.a文件是應用包,那麼我們如何進行調用呢?
接下來我們新建一個應用程序來調用
新建應用包mathapp
1
2
3
4
|
cd
$GOPATH / src
mkdir
mathapp
cd
mathapp
vim main .go
|
// $GOPATH/src/mathapp/main.go源碼:
01
02
03
04
05
06
07
08
09
10
|
package main
import (
"mymath"
"fmt"
)
func main ( ) {
fmt.Printf ( "Hello,
world. Sqrt(2) = %v\n" , mymath.Sqrt ( 2 ) )
}
|
如何編譯程序呢?進入該應用目錄,然後執行go build,那麼在該目錄下麵會生成一個mathapp的可執行文件
./mathapp輸出如下內容
1
|
Hello , world.
Sqrt ( 2 ) =
1.4 14213562373095
|
如何安裝該應用,進入該目錄執行
1
|
go
install
|
1
|
$GOPATH / bin /
|
1
|
mathapp
|
也是輸出如下內容
1
|
Hello , world.
Sqrt ( 2 ) =
1.4 14213562373095
|
go語言有一個獲取遠程包的工具就是go get,目前go get支持多數開源社區(例如:github、googlecode、bitbucket、Launchpad)
1
|
go get github.com / astaxie / beedb
|
go get -u 參數可以自動更新包,而且當go get的時候會自動獲取該包依賴的其他第三方包
通過這個命令可以獲取相應的源碼,對應的開源平台采用不同的源碼控製工具,例如github采用git、googlecode采用hg,所以要想獲取這些源碼,必須先安裝相應的源碼控製工具
通過上麵獲取的代碼在我們本地的源碼相應的代碼結構如下
01
02
03
04
05
06
07
08
09
10
|
$GOPATH
src
| --github.com
| - astaxie
| - beedb
pkg
| --相應平台
| - github.com
| --astaxie
|beedb.a
|
go get本質上可以理解為首先第一步是通過源碼工具clone代碼到src下麵,然後執行go install
在代碼中如何使用遠程包,很簡單的就是和使用本地包一樣,隻要在開頭import相應的路徑就可以
import "github.com/astaxie/beedb"程序的整體結構通過上麵建立的我本地的mygo的目錄結構如下所示
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
|
bin /
mathapp
pkg /
平台名 / 如:darwin_amd 64 、linux_amd 64
mymath.a
github.com /
astaxie /
beedb.a
src /
mathapp
main .go
mymath /
sqrt.go
github.com /
astaxie /
beedb /
beedb.go
util.go
|
從上麵的結構我們可以很清晰的看到,bin目錄下麵存的是編譯之後可執行的文件,pkg下麵存放的是函數包,src下麵保存的是應用源代碼
[1] Windows係統中環境變量的形式為%GOPATH%,本書主要使用Unix形式,Windows用戶請自行替換。
https://www.00660.cn/thread-400-1-1.html
最後更新:2017-04-03 12:55:00