入坑Go語言(二) 包機制的理解

2021-08-19 22:24:47 字數 2223 閱讀 3697

package遵循以下原則:

1.package是最基本的分發單位和工程管理中依賴關係的體現

2. 每個go語言源**檔案開頭都必須要有乙個package宣告,表示源**檔案所屬包

3. 要生成go語言可執行程式,必須要有名為mainpackage包,且在該包下必須有且只有乙個main函式

4.同乙個路徑下只能存在乙個package,乙個package可以由多個源**檔案組成

按照我個人的理解,乙個目錄就是乙個包,該目錄下的所有檔案必須屬於同乙個包。

再來看看多檔案的package

// file: main.go

package main

import

"fmt"

func learn()

func main()

// file: eat.go

package main

import

"fmt"

func eat()

在命令列編譯一下,然後執行

$ go build . # 會在當前目錄生成名為`go`的執行檔案

$ ./go

結果輸出

---

-main

start--

--iam

learning.i

ameating.-

---main

end---

-

import語句的唯一作用就是匯入原始碼檔案所依賴的包,而且匯入的包必須在原始碼檔案裡用到,否則會報錯(在vs code裡如果輸入乙個沒有匯入的包函式,vs code會自動匯入)

import的寫法有兩種格式,我個人更傾向於第二種

import

"package1"

import

"package2"

import

"package3"

improt (

"package1",

"package2",

"package3"

)

package類似,import原理遵守以下幾個原則:

如果乙個main匯入其他的包,包會被順序匯入

如果匯入的包(pkg1)依賴其他的包(包pkg2),會首先匯入pkg2,然後初始化pkg2中的常量與變數,如果pkg2中有init函式,會自動執行init

所有包匯入完成後才會對main的常量和變數進行初始化,然後執行main中的init函式(如果有的話),最後執行main函式

如果乙個包被匯入多次實際上只會匯入一次

關於上面第三條規的import多重依賴的流程如下圖所示

// 此處省略一些**...

iii.println("hello")

如果別名是.的話,則可以這樣呼叫(一般不建議這樣使用)

import . "fmt"

// 此處省略一些**...

println("hello")

有乙個最特別的情況,如果別名是_的話,表示只註冊該包(初始化全域性常量和變數,且執行其init函式),並不會實際引入該包

Go語言入坑

認識並安裝go語言開發環境 go語言簡介 go語言特點 go語言開發的應用 一些見解 go語言環境搭建 go語言基礎知識 第乙個go應用helloword 配置 go語言常用關鍵字 go語言開發工具liteide go語言資料型別 其它基礎 流程控制語句 switch for迴圈 go語言函式 go...

go語言的坑

package main import fmt func main mp make map int int fmt.println for range 坑 for index,value range slice 根本原因在於for range是用乙個變數承接mp中的內容的 for key,value...

Go語言 閉包

使用閉包實現乙個小功能。判斷給定的檔名是否帶有字尾,如果有指定字尾就直接輸出,如果不帶字尾就新增字尾後,輸出檔名 package main import fmt strings func makesuffix suffix string func string string return name ...