Go中的工程管理
一、工作區:
其實就是一個對應於特定工程的目錄,它應包含 3 個子目錄: src 目錄、 pkg 目錄和 bin 目錄。
l src 目錄:用於以程式碼包的形式組織並儲存 Go 原始碼檔案。(比如: .go .c .h .s 等)
l pkg 目錄:用於存放經由 go install 命令構建安裝後的程式碼包(包含 Go 庫原始碼檔案)的“ .a ”歸檔檔案。
l bin 目錄:與 pkg 目錄類似,在通過 go install 命令完成安裝後,儲存由 Go 命令原始碼檔案生成的可執行檔案。
若環境變數 GOPATH 中包含多個工作區的目錄路徑,像這樣執行 go install 命令就會失效,此時必須設定環境變數 GOBIN 。
二、包:
我們建立的的自定義包最好 放在 GOPATH 的 src 目錄下 (或者 GOPATH src 的某個子目錄)。
在 Go 語言中,程式碼包中的原始碼檔名可以是任意的。但是,這些任意名稱的原始碼檔案都必須以包宣告語句作為檔案中的第一行,每個包都對應一個獨立的名字空間。
package calc
包中成員以名稱⾸字母⼤⼩寫決定訪問許可權:
l public: ⾸字母⼤寫,可被包外訪問
l private: ⾸字母⼩寫,僅包內成員可以訪問
注意: 同一個目錄下 不能 定義不同的 package 。
三、main包。
init 函式(能夠應用於所有的 package ), 建議使用者在一個 package 中每個檔案只寫一個 init 函式
main 函式(只能應用於 package main ), 但 package main 就必須包含一個 main 函式.
執 行順序 :
1)每個包可以包含任意多個 init 函式,這些函式都會在程式執行開始的時候被呼叫。所有被 編譯器發現的 init 函式都會安排在 main 函式之前執行。 init 函式用在設定包、初始化變數或者其他要在程式執行前優先完成的引導工作。
2) 程式的初始化和執行都起始於 main 包。如果 main 包還匯入了其它的包,那麼就會在編譯時將它們依次匯入。
3) 有時一個包會被多個包同時匯入,那麼它只會被匯入一次(例如很多包可能都會用到 fmt 包,但它只會被匯入一次,因為沒有必要匯入多次)。
4) 當一個包被匯入時,如果該包還匯入了其它的包,那麼會先將其它包匯入進來,然後再對這些包中的 包級常量和變 量 進行初始化,接著執行 init 函式 (如果有的話),依次類推。
5) 等所有被匯入的包都載入完畢了,就會開始對 main 包中的包級常量和變數進行初始化,然後執行 main 包中的 init 函式(如果存在的話),最後執行 main 函式。
四,匯入包使用關鍵字import。
一)、import可以是相對路徑,也可以是絕對路徑。
//方法1
import "fmt"
import "net"
//方法2
import (
"fmt"
"net"
)
二)、包的查詢路徑。
1) 標準庫中的包會在安裝 Go 的位置找到; 2) Go開發者建立的包會在GOPATH環境變數指定目錄裡查詢。
3)如果編譯器查遍 GOPATH 也沒有找到要匯入的包,那麼在試圖對程式執行 run 或者 build
的時候就會出錯。
三)點操作,別名操作和_操作。
1)點操作:
import (
// 這個點操作的含義是這個包匯入之後在你呼叫這個包的函式時,可以省略字首的包名
. "fmt"
)
func main(){
Println("Hello go!")
}
2)別名操作
import (
io "fmt" //fmt改為io
)
func main(){
io.Println("hello go") //通過io別名呼叫
}
3)_操作
import (
_"fmt"
)
_操作其實是引入改包,而不直接使用包裡面的函式, 而是呼叫了該包裡面的init函式。