包(package)是多個(gè)Go 源碼的集合,是一種高級(jí)的代碼復(fù)用方案,Go 語(yǔ)言為我們提供了很多內(nèi)置包,如fmt、strconv、strings、sort、errors、time、encoding/json、os、io
等。
Golang 中的包可以分為三種:
1、系統(tǒng)內(nèi)置包。
2、自定義包。
3、第三方包。
系統(tǒng)內(nèi)置包: Golang 語(yǔ)言給我們提供的內(nèi)置包,引入后可以直接使用,如fmt、strconv、strings、sort、errors、time、encoding/json、os、io
等。
自定義包:開發(fā)者自己寫的包。
第三方包:屬于自定義包的一種,需要下載安裝到本地后才可以使用,如前面給大家介紹的"github.com/shopspring/decimal"
包解決float
精度丟失問題。
在Golang1.11 版本之前如果我們要自定義包的話必須把項(xiàng)目放在GOPATH 目錄。
Go1.11 版本之后無(wú)需手動(dòng)配置環(huán)境變量,使用go mod 管理項(xiàng)目,也不需要非得把項(xiàng)目放到GOPATH指定目錄下,你可以在你磁盤的任何位置新建一個(gè)項(xiàng)目, Go1.13 以后可以徹底不要GOPATH了。
1、go mod init 初始化項(xiàng)目實(shí)際項(xiàng)目開發(fā)中我們首先要在我們項(xiàng)目目錄中用 go mod 命令生成一個(gè)go.mod 文件管理我們項(xiàng)目的依賴。
比如我們的golang 項(xiàng)目文件要放在了itying 這個(gè)文件夾,這個(gè)時(shí)候我們需要在itying 文件夾里面使用go mod 命令生成一個(gè)go.mod 文件。
包(package)是多個(gè)Go 源碼的集合,一個(gè)包可以簡(jiǎn)單理解為一個(gè)存放多個(gè).go 文件的文件夾。
該文件夾下面的所有g(shù)o 文件都要在代碼的第一行添加如下代碼,聲明該文件歸屬的包。
package 包名
注意事項(xiàng):
-
符號(hào)。如果想在一個(gè)包中引用另外一個(gè)包里的標(biāo)識(shí)符(如變量、常量、類型、函數(shù)等)時(shí),該標(biāo)識(shí)符必須是對(duì)外可見的(public)。
在Go 語(yǔ)言中只需要將標(biāo)識(shí)符的首字母大寫就可以讓標(biāo)識(shí)符對(duì)外可見了。
1.1、定義一個(gè)包名為 calc 的包代碼如下:E:\golang\src\pkg\calc\calc.go
創(chuàng)建文件夾:pkg\calc,創(chuàng)建文件:calc.go。
package calc
//首字母大小表示公有,首字母小寫表示私有
var a = 100 //私有變量
var Age = 20 //公有變量
func Add(x, y int) int {return x + y
}
func Sum(x, y int) int {return x - y
}
1.2、main.go 中引入這個(gè)包訪問一個(gè)包里面的公有屬性方法的時(shí)候需要通過包名稱.去訪問。
package main
import (
"fmt"
"one/main/src/pkg/calc"
)
func main() {c := calc.Add(10, 20)
fmt.Println(c)
}
running...
30
2、導(dǎo)入一個(gè)包單行導(dǎo)入
單行導(dǎo)入的格式如下:
import "包1"
import "包2"
多行導(dǎo)入
多行導(dǎo)入的格式如下:
import (
"包1"
"包2"
)
匿名導(dǎo)入包
如果只希望導(dǎo)入包,而不使用包內(nèi)部的數(shù)據(jù)時(shí),可以使用匿名導(dǎo)入包。
具體的格式如下:
import _ "包的路徑"
匿名導(dǎo)入的包與其他方式導(dǎo)入的包一樣都會(huì)被編譯到可執(zhí)行文件中。
自定義包名
在導(dǎo)入包名的時(shí)候,我們還可以為導(dǎo)入的包設(shè)置別名。
通常用于導(dǎo)入的包名太長(zhǎng)或者導(dǎo)入的包名沖突的情況。
具體語(yǔ)法格式如下:
import 別名 "包的路徑"
單行引入定義別名:
import c "itying/calc"
多行引入定義別名:
import (
"fmt"
c "itying/calc"
)
四、Golang 中 init() 初始化函數(shù)init() 函數(shù)介紹
在Go 語(yǔ)言程序執(zhí)行時(shí)導(dǎo)入包語(yǔ)句會(huì)自動(dòng)觸發(fā)包內(nèi)部 init()函數(shù)的調(diào)用。
需要注意的是: init() 函數(shù)沒有參數(shù)也沒有返回值。
init()函數(shù)在程序運(yùn)行時(shí)自動(dòng)被調(diào)用執(zhí)行,不能在代碼中主動(dòng)調(diào)用它。
包初始化執(zhí)行的順序如下圖所示:
init()函數(shù)執(zhí)行順序
Go 語(yǔ)言包會(huì)從main 包開始檢查其導(dǎo)入的所有包,每個(gè)包中又可能導(dǎo)入了其他的包。
Go 編譯器由此構(gòu)建出一個(gè)樹狀的包引用關(guān)系,再根據(jù)引用順序決定編譯順序,依次編譯這些包的代碼。
在運(yùn)行時(shí),被最后導(dǎo)入的包會(huì)最先初始化并調(diào)用其init()函數(shù), 如下圖示:
五、Golang 中使用第三方包我們可以在 https://pkg.go.dev/ 查找看常見的 golang 第三方包。
1、找到我們需要下載安裝的第三方包的地址比如前面給大家演示的解決 float 精度損失的包decimal
。
https://github.com/shopspring/decimal
第一種方法:go get 包名稱(全局)
go get github.com/shopspring/decimal
PS E:\golang\src>go get github.com/shopspring/decimal
go: downloading github.com/shopspring/decimal v1.3.1
go: added github.com/shopspring/decimal v1.3.1
PS E:\golang\src>
查看包安裝路徑:
go env
以下即是go的包安裝路徑
set GOPATH=C:\Users\Administrator\go
第二種方法:go mod download (全局)
package main
import (
"fmt"
"github.com/shopspring/decimal"
)
func main() {quantity := decimal.NewFromInt(3)
fmt.Println(quantity)
}
運(yùn)行命令
go mod download
go run .\main.go 或者 go install
賴包會(huì)自動(dòng)下載到 $GOPATH/pkg/mod,多個(gè)項(xiàng)目可以共享緩存的mod,注意使用 go mod download 的時(shí)候首先需要在你的項(xiàng)目里面引入第三方包。
第三種方法:go mod vendor 將依賴復(fù)制到當(dāng)前項(xiàng)目的 vendor 下(本項(xiàng)目)
go mod vendor
將依賴復(fù)制到當(dāng)前項(xiàng)目的 vendor 下。
注意:使用 go mod vendor 的時(shí)候首先需要在你的項(xiàng)目里面引入第三方包。
3、看文檔使用這個(gè)包包安裝完畢后我們就可以看文檔使用這個(gè)包了…
示例下載 gjson 包PS E:\golang\src>go get -u github.com/tidwall/gjson
go: downloading github.com/tidwall/gjson v1.14.4
go: downloading github.com/tidwall/pretty v1.2.0
go: downloading github.com/tidwall/match v1.1.1
go: downloading github.com/tidwall/pretty v1.2.1
go: added github.com/tidwall/gjson v1.14.4
go: added github.com/tidwall/match v1.1.1
go: added github.com/tidwall/pretty v1.2.1
PS E:\golang\src>
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購(gòu),新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧