go語言是使用包來組織源**的,包(package)是多個 go 原始碼的集合,是一種高階的**復用方案。go語言中為我們提供了很多內建包,如 fmt、os、io 等。
任何源**檔案必須屬於某個包,同時原始碼檔案的第一行有效**必須是package pacakgename 語句,通過該語句宣告自己所在的包。
包的基本概念
go語言的包借助了目錄樹的組織形式,一般包的名稱就是其原始檔所在目錄的名稱,雖然go語言沒有強制要求包名必須和其所在的目錄名同名,但還是建議包名和所在目錄同名,這樣結構更清晰。
包可以定義在很深的目錄中,包名的定義是不包括目錄路徑的,但是包在引用時一般使用全路徑引用。比如在gopath/src/a/b/ 下定義乙個包 c。在包 c 的原始碼中只需宣告為package c,而不是宣告為package a/b/c,但是在匯入 c 包時,需要帶上路徑,例如import 「a/b/c」。
包的習慣用法:
包的匯入
要在**中引用其他包的內容,需要使用 import 關鍵字匯入使用的包。具體語法如下:
import
"包的路徑"
注意事項:
包的匯入有兩種寫法,分別是單行匯入和多行匯入。
單行匯入
單行匯入的格式如下:
import
"包 1 的路徑"
import
"包 2 的路徑"
多行匯入多行匯入的格式如下:
import
("包 1 的路徑"
"包 2 的路徑"
)
包的匯入路徑包的引用路徑有兩種寫法,分別是全路徑匯入和相對路徑匯入。
全路徑匯入
包的絕對路徑就是goroot/src/或gopath/src/後麵包的存放路徑,如下所示:
import
"lab/test"
import
"database/sql/driver"
import
"database/sql"
上面**的含義如下:
相對路徑匯入
相對路徑只能用於匯入gopath 下的包,標準包的匯入只能使用全路徑匯入。
例如包 a 的所在路徑是gopath/src/lab/a,包 b 的所在路徑為gopath/src/lab/b,如果在包 b 中匯入包 a ,則可以使用相對路徑匯入方式。示例如下:
// 相對路徑匯入
import
"../a"
當然了,也可以使用上面的全路徑匯入,如下所示:
// 全路徑匯入
import
"lab/a"
包的引用格式包的引用有四種格式,下面以 fmt 包為例來分別演示一下這四種格式。
1) 標準引用格式
import
"fmt"
此時可以用fmt.作為字首來使用 fmt 包中的方法,這是常用的一種方式。
示例**如下:
package main
import
"fmt"
func
main()
2) 自定義別名引用格式在匯入包的時候,我們還可以為匯入的包設定別名,如下所示:
import f "fmt"
其中 f 就是 fmt 包的別名,使用時我們可以使用f.來代替標準引用格式的fmt.來作為字首使用 fmt 包中的方法。
示例**如下:
package main
import f "fmt"
func
main()
3) 省略引用格式
import
."fmt"
這種格式相當於把 fmt 包直接合併到當前程式中,在使用 fmt 包內的方法是可以不用加字首fmt.,直接引用。
示例**如下:
package main
import
."fmt"
func
main()
4) 匿名引用格式在引用某個包時,如果只是希望執行包初始化的 init 函式,而不使用包內部的資料時,可以使用匿名引用格式,如下所示:
import
_"fmt"
匿名匯入的包與其他方式匯入的包一樣都會被編譯到可執行檔案中。
使用標準格式引用包,但是**中卻沒有使用包,編譯器會報錯。如果包中有 init 初始化函式,則通過import _ 「包的路徑」 這種方式引用包,僅執行包的初始化函式,即使包沒有 init 初始化函式,也不會引發編譯器報錯。
示例**如下:
package main
import(_
"database/sql"
"fmt"
)func
main()
注意:
包載入
通過前面一系列的學習相信大家已經大體了解了 go 程式的啟動和載入過程,在執行 main 包的 mian 函式之前, go 引導程式會先對整個程式的包進行初始化。整個執行的流程如下圖所示。
圖:go 包的初始化
go語言包的初始化有如下特點:
Go 語言包的概念
golang 包的理解 在 golang 中,使用包是一件常見的事,包的本質實際上就是建立不同的資料夾,來存放程式檔案。個人理解大概相當於 php 的命名空間的概念。golang 的每乙個檔案都屬於乙個包,也就是說go是以包的形式來管理檔案和專案目錄結構的。golang 包的三大作用 區分相同名字的...
GO 語言的基本概念
1 go 語言中 和 有什麼區別 使用必須使用先var宣告例如 vara a 100 或var b 100 或var c int 100 是宣告並賦值,並且系統自動推斷型別,不需要var關鍵字 d 1002 golang之下劃線 之語義說明 這個應該是最簡單的用途,比如某個函式返回三個引數,但是我們...
go語言包的介紹
包檔案所在的位置 包檔案就是乙個go原始碼檔案 如何指定包名 package name name是目錄名稱 不能是main 在同乙個目錄中所有的go檔案的包名必須要相同 否則會異常 包檔案所在的目錄如何命名 如果包是對外發布的 最好用網域名稱來命名頂層的包目錄 以保證全球唯一 import 裡面匯入...