重拾golang - go目錄結構說明

go 目錄結構說明

    golang集多編程範式之大成者,使開發者能夠快速的開發、測試、部署程序,支持全平臺靜態編譯。go具有優秀的依賴管理,高效的運行效率,龐大的第三方庫支持以及在國內持續的增長勢頭。  
    作爲開發者的我們也將不得不重視這門語言的興起。首先向大家講解一下go語言開發環境的目錄結構,讓我們更清楚的認識它。

一、goroot開發包目錄

    當我們安裝好後,會在安裝目錄出現一個go/文件夾,如果是windows目錄應在再C:/go下(默認),如果是unix/linux一般會在/usr/local/go下,這個目錄是unix software resource的含義。
# liunx上目錄位置
chao@chao-PC:/usr/local/go$ pwd
/usr/local/go

# 主要目錄包含如下圖,分別進行說明:

go-folder

1、api文件夾

    存放Go API檢查器的輔助文件。其中,go1.1.txt、go1.2.txt、go1.3.txt和go1.txt文件分別羅列了不同版本的Go語言的全部API特徵;except.txt文件中羅列了一些(在不破壞兼容性的前提下)可能會消失的API特性;next.txt文件則列出了可能在下一個版本中添加的新API特性。

2、bin文件夾

    存放所有由官方提供的Go語言相關工具的可執行文件。默認情況下,該目錄會包含go和gofmt這兩個工具。

3、doc文件夾

    存放Go語言幾乎全部的HTML格式的官方文檔和說明,方便開發者在離線時查看。

4、misc文件夾

    存放各類編輯器或IDE(集成開發環境)軟件的插件,輔助它們查看和編寫Go代碼。有經驗的軟件開發者定會在該文件夾中看到很多熟悉的工具。

查看:

chao@chao-PC:/usr/local/go/misc$ ls
android  benchcmp  chrome   git  linkcheck  sortac  tour
arm      cgo       editors  ios  nacl       swig    trace

5、pkg文件夾

    用於在構建安裝後,保存Go語言標準庫的所有歸檔文件。pkg文件夾包含一個與Go安裝平臺相關的子目錄,我們稱之爲“平臺相關目錄”。例如,在針對Linux 32bit操作系統的二進制安裝包中,平臺相關目錄的名字就是linux_386;而在針對Windows 64bit操作系統的安裝包中,平臺相關目錄的名字則爲windows_amd64。
    Go源碼文件對應於以“.a”爲結尾的歸檔文件,它們就存儲在pkg文件夾下的平臺相關目錄中。  
    值得一提的是,pkg文件夾下有一個名叫tool的子文件夾,該子文件夾下也有一個平臺相關目錄,其中存放了很多可執行文件。關於這些可執行文件的用途,讀者可參見附屬於本書的Go命令教程。

查看:

chao@chao-PC:/usr/local/go/pkg$ ls
include      linux_amd64_dynlink  linux_amd64_shared              tool
linux_amd64  linux_amd64_race     linux_amd64_testcshared_shared

6、src文件夾

    存放所有標準庫、Go語言工具,以及相關底層庫(C語言實現)的源碼。通過查看這個文件夾,可以瞭解到Go語言的方方面面。

查看:

chao@chao-PC:/usr/local/go/src$ ls
all.bash          clean.bat  errors    iostest.bash   os         sort
all.bat           clean.rc   expvar    log            path       strconv
all.rc            cmd        flag      make.bash      plugin     strings
androidtest.bash  cmp.bash   fmt       make.bat       race.bash  sync
archive           compress   go        Make.dist      race.bat   syscall
bootstrap.bash    container  hash      make.rc        reflect    testing
bufio             context    html      math           regexp     text
buildall.bash     crypto     image     mime           run.bash   time
builtin           database   index     naclmake.bash  run.bat    unicode
bytes             debug      internal  nacltest.bash  run.rc     unsafe
clean.bash        encoding   io        net            runtime    vendor

7、test文件夾

    存放測試Go語言自身代碼的文件。通過閱讀這些測試文件,可大致瞭解Go語言的一些特性和使用方法。

二、gopath工作區目錄結構

    在環境變量中除了$GOPATH這樣的顯式變量外,Go語言還有兩個隱含的環境變量——GOOS和GOARCH。
    GOOS代表程序構建環境的目標操作系統,可籠統地理解爲Go語言安裝到的那個操作系統的標識,其值可以是darwin、freebsd、linux或windows。
    GOARCH則代表程序構建環境的目標計算架構,可籠統地理解爲Go語言安裝到的那臺計算機的計算架構的標識,其值可以是386、amd64或arm。
工作區有3個子目錄:src目錄、pkg目錄和bin目錄。

1、src目錄

    用於以代碼包的形式組織並保存Go源碼文件。這裏的代碼包,與src下的子目錄一一對應。例如,若一個源碼文件被聲明爲屬於代碼包logging,那麼它就應當被保存在src目錄下名爲logging的子目錄中。當然,我們也可以把Go源碼文件直接放於src目錄下,但這樣的Go源碼文件就只能被聲明爲屬於main代碼包了。除非用於臨時測試或演示,一般還是建議把Go源碼文件放入特定的代碼包中。
Go語言的源碼文件分爲3類:Go庫源碼文件、Go命令源碼文件和Go測試源碼文件。

2、pkg目錄

    用於存放經由go install命令構建安裝後的代碼包(包含Go庫源碼文件)的“.a”歸檔文件。該目錄與GOROOT目錄下的pkg功能類似。區別在於,工作區中的pkg目錄專門用來存放用戶(也就是程序開發者)代碼的歸檔文件。構建和安裝用戶源碼的過程一般會以代碼包爲單位進行,比如logging包被編譯安裝後,將生成一個名爲logging.a的歸檔文件,並存放在當前工作區的pkg目錄下的平臺相關目錄中。

3、bin目錄

 與pkg目錄類似,在通過go install命令完成安裝後,保存由Go命令源碼文件生成的可執行文件。在Linux操作系統下,這個可執行文件一般是一個與源碼文件同名的文件。而在Windows操作系統下,這個可執行文件的名稱是源碼文件名稱加.exe後綴。
注意: 這裏有必要明確一下Go語言的命令源碼文件和庫源碼文件的區別。所謂命令源碼文件,就是聲明爲屬於main代碼包,並且包含無參數聲明和結果聲明的main函數的源碼文件。
這類源碼文件可以獨立運行(使用go run命令),也可被go build或go install命令轉換爲可執行文件。而庫源碼文件則是指存在於某個代碼包中的普通源碼文件。

三、go編譯時,目錄查找順序

go工程包含依賴包管理,GOROOT,GOPATH三類目錄來查找編譯需要的庫。他們的順序如下:
  1. 從工程項目的root目錄查找vendor目錄中的依賴庫。
  2. 從用戶環境變量$GOPATH/src中查找依賴庫。
  3. 從用戶環境變量$GOROOT/src中查找依賴庫。
  4. 未找到,拋出異常,編譯終止。

總結:

    通過對golang的目錄結構的瞭解和編譯時查找依賴庫的順序,對這門語言有一個初步的認識,接下來我們將通過go的內部命令深入瞭解一下它。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章