閱讀492 返回首頁    go 阿裏雲 go 技術社區[雲棲]


GOPATH與工作空間

GOPATH設置

go 命令依賴一個重要的環境變量:$GOPATH1


(注:這個不是Go安裝目錄。下麵以筆者的工作目錄為說明,請替換自己機器上的工作目錄。)

在類似 Unix 環境大概這樣設置:

[AppleScript] 純文本查看 複製代碼
?
1
export GOPATH=/home/apple/mygo

Windows 設置如下,新建一個環境變量名稱叫做GOPATH:

  
[AppleScript] 純文本查看 複製代碼
?
1
GOPATH=c:\mygo

GOPATH允許多個目錄,當有多個目錄時,請注意分隔符,多個目錄的時候Windows是分號,Linux係統是冒號,當有多個GOPATH時,默認會將go get的內容放在第一個目錄下

  • [AppleScript] 純文本查看 複製代碼
    ?
    1
    2
    3
    4
    以上 $GOPATH 目錄約定有三個子目錄:
    src 存放源代碼(比如:.go .c .h .s等)
    pkg 編譯後生成的文件(比如:.a)
    bin 編譯後生成的可執行文件(為了方便,可以把此目錄加入到 $PATH 變量中)

以後我所有的例子都是以mygo作為我的gopath目錄

應用目錄結構

[AppleScript] 純文本查看 複製代碼
?
1
建立包和目錄:$GOPATH/src/mymath/sqrt.go(包名:"mymath"

以後自己新建應用或者一個代碼包都是在src目錄下新建一個文件夾,文件夾名稱一般是代碼包名稱,當然也允許多級目錄,例如在src下麵新建了目錄

[AppleScript] 純文本查看 複製代碼
?
1
$GOPATH/src/github.com/astaxie/beedb
那麼這個包路徑就是
[AppleScript] 純文本查看 複製代碼
?
1
“github.com/astaxie/beedb”,
包名稱是最後一個目錄beedb

執行如下代碼

[AppleScript] 純文本查看 複製代碼
?
1
cd $GOPATH/src    mkdir mymath

新建文件sqrt.go,內容如下

  
[AppleScript] 純文本查看 複製代碼
?
1
2
3
4
5
6
7
8
//$GOPATH/src/mymath/sqrt.go源碼如下:   
                package mymath   
                     unc Sqrt(x float64)float64{      
                                         z:=0.0      
                                         fori :=0; i <1000; i++{          
                                                  z-=(z*z-x)/ (2* x)      
                                                       }       return z  
               }

這樣我的應用包目錄和代碼已經新建完畢,注意:一般建議package的名稱和目錄名保持一致

編譯應用

上麵我們已經建立了自己的應用包,如何進行編譯安裝呢?有兩種方式可以進行安裝

1、隻要進入對應的應用包目錄,然後執行go install,就可以安裝了

2、在任意的目錄執行如下代碼go install mymath

安裝完之後,我們可以進入如下目錄

  
[AppleScript] 純文本查看 複製代碼
?
1
2
3
cd $GOPATH/pkg/${GOOS}_${GOARCH}
 //可以看到如下文件
 mymath.a

這個.a文件是應用包,那麼我們如何進行調用呢?

接下來我們新建一個應用程序來調用

新建應用包mathapp

   
[AppleScript] 純文本查看 複製代碼
?
1
2
3
4
cd $GOPATH/src
   mkdir mathapp
   cd mathapp
   vimmain.go

// $GOPATH/src/mathapp/main.go源碼:

  
[AppleScript] 純文本查看 複製代碼
?
01
02
03
04
05
06
07
08
09
10
packagemain
 
   import(
         "mymath"
         "fmt"
   )
 
   funcmain(){
         fmt.Printf("Hello, world.  Sqrt(2) = %v\n",mymath.Sqrt(2))
   }

如何編譯程序呢?進入該應用目錄,然後執行go build,那麼在該目錄下麵會生成一個mathapp的可執行文件

    ./mathapp

輸出如下內容

[AppleScript] 純文本查看 複製代碼
?
1
Hello,world.  Sqrt(2)= 1.414213562373095

如何安裝該應用,進入該目錄執行

[AppleScript] 純文本查看 複製代碼
?
1
go install
,那麼在
[AppleScript] 純文本查看 複製代碼
?
1
$GOPATH/bin/
下增加了一個可執行文件mathapp,這樣可以在命令行輸入如下命令就可以執行

[AppleScript] 純文本查看 複製代碼
?
1
mathapp

也是輸出如下內容

[AppleScript] 純文本查看 複製代碼
?
1
Hello,world.  Sqrt(2)= 1.414213562373095
獲取遠程包

go語言有一個獲取遠程包的工具就是go get,目前go get支持多數開源社區(例如:github、googlecode、bitbucket、Launchpad)

[AppleScript] 純文本查看 複製代碼
?
1
gogetgithub.com/astaxie/beedb
go get -u 參數可以自動更新包,而且當go get的時候會自動獲取該包依賴的其他第三方包

通過這個命令可以獲取相應的源碼,對應的開源平台采用不同的源碼控製工具,例如github采用git、googlecode采用hg,所以要想獲取這些源碼,必須先安裝相應的源碼控製工具

通過上麵獲取的代碼在我們本地的源碼相應的代碼結構如下

[AppleScript] 純文本查看 複製代碼
?
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的目錄結構如下所示

[AppleScript] 純文本查看 複製代碼
?
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
bin/
    mathapp
pkg/
    平台名/如:darwin_amd64、linux_amd64
         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

  上一篇:go HDU 1248 寒冰王座
  下一篇:go Sql Server在建好的表中,新增一列