8 1 Go語言包的基本概念

2021-10-06 20:47:30 字數 3070 閱讀 2012

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 裡面匯入...