Go 筆記三 庫原始碼檔案

2021-08-23 14:27:04 字數 970 閱讀 2214

庫原始碼檔案不能被直接執行,它僅用於存放程式實體。只要遵從 go 語言規範,這些程式實體就可以被其他**使用。

在 go 語言中,它是變數、常量、函式、結構體和介面的統稱。

第一條規則,同目錄下的原始碼檔案的**包宣告語句要一致。也就是說,它們要同屬於乙個**包。這對於所有原始碼檔案都是適用的。

第二條規則,原始碼檔案宣告的**包的名稱可以與其所在的目錄的名稱不同。在針對**包進行構建時,生成的結果檔案的主名稱與其父目錄的名稱一致。

名稱的首字母為大寫的程式實體才可以被當前包外的**引用,否則它就只能被當前包內的其他**引用。

通過建立internal**包讓一些程式實體僅僅能被當前模組中的其他**引用。

這被稱為 go 程式實體的第三種訪問許可權:模組級私有

具體規則是,internal**包中宣告的公開程式實體僅能被該**包的直接父包及其子包中的**引用

當然,引用前需要先導入這個interna包。

對於其他**包,匯入該interna包都是非法的,無法通過編譯。

import後路徑最後一級相同,不一定會衝突。

分為兩種情況:

如果資料夾下檔案宣告的包名相同,則肯定衝突,會報錯redeclared。

如果資料夾下檔案宣告的包名不同,也不會衝突。

給包設定別名,呼叫的時候來區分開不同的package,比如:import(b 「bbbb」)

匯入的點操作,import(. 「bbbb」)。這樣就可以直接呼叫bbbb下面的函式而不用再bbbb.funcname的方式呼叫。

如果只是想引入某包並沒有在**中實際呼叫則可以這麼處理來避免衝突:import(_ 「bbbb」)

像第一問一樣採取不同的包名宣告,畢竟包名不一定要和資料夾名一樣

go 命令原始碼檔案

如果乙個原始碼檔案宣告屬於main包,並且包含乙個無引數宣告且無結果宣告的 main 函式,那麼它就是命令原始碼檔案。package main import fmt func main 根據執行程式時根據給定的引數問候某人 package main import flag 接收和解析命令引數 fmt...

庫原始碼檔案

庫原始碼檔案是不能被直接執行的原始碼檔案,它僅用於存放程式實體,這些程式實體可以被其他 使用 遵從你go語言規範 這裡的其他 是指與被使用的程式實體在同乙個原始碼檔案內,也可以在其他原始碼檔案,甚至其他 中。程式實體是變數 常量 函式 結構體和介面的統稱。必須先宣告程式實體,然後再去使用,程式實體的...

Go 原始碼學習 log 庫

log 包實現了乙個簡單的日誌功能。logger 結構體作為日誌物件,生成文字行到 io.writer。每次記錄日誌的操作都生成一行日誌,即便是log.printf也不用包含 n。結構體中有sync.metex鎖,保證了在多 goroutine 情況時的順序寫入。type logger struct...