Go 語言中的包
在 Go 語言的錯(cuò)誤處理中我們提到了 errors 包,當(dāng)時(shí)沒有詳細(xì)的介紹。本文就來詳細(xì)的介紹一下 Go 語言中包相關(guān)的概念。
和大部分語言一致,Go 語言也是支持調(diào)用其它文件中的 Go 代碼的。Go 語言是現(xiàn)這一功能則是通過包來實(shí)現(xiàn)的。而實(shí)現(xiàn)包的功能則是通過關(guān)鍵字 package 來實(shí)現(xiàn)的,使用 package 來聲明代碼所在的包。
1. 基本概念
Go 語言中一般使用文件所在的文件名來命名自己的包名,這樣層次清晰便于管理。其中包名定義的注意事項(xiàng)如下:
- 包名一般都是全小寫;
- 包名不可以是路徑;
- 一個(gè)文件夾下只能有一個(gè)包名;
- 每個(gè)程序的入口包名均為 main,只有有 main 包,程序才可以執(zhí)行。
2. 包的導(dǎo)入
現(xiàn)在的編譯器一般都會(huì)幫開發(fā)者做掉導(dǎo)包這個(gè)功能,但是我們還是要了解一下如何導(dǎo)入一個(gè)包,使之可以在程序中使用。我們導(dǎo)入包需要用到一個(gè)叫 import 的關(guān)鍵字。
2.1 單行導(dǎo)入
可以使用形如import 包所在路徑
的方式導(dǎo)入我們想要導(dǎo)入的包,其中包的路徑可以使用兩種方式來表示:
- 相對(duì)路徑:即你的目標(biāo)包和你當(dāng)前代碼的相對(duì)路徑。
- 絕對(duì)路徑:即
$GOPATH/src
和$GOROOT/src
之后的路徑。
代碼示例
import firstgo/packagetest1
import ../packagetest2
- 第 1 行:使用絕對(duì)路徑導(dǎo)入 packagetest1 這個(gè)包;
- 第 2 行:使用相對(duì)路徑導(dǎo)入 packagetest2 這個(gè)包。
2.2多行導(dǎo)入
多行導(dǎo)入的方式有點(diǎn)類似于多個(gè)常量同時(shí)定義。
代碼示例:
import (
firstgo/packagetest1
firstgo/packagetest2
)
3. 使用規(guī)則
在 Go 語言中,并不是直接導(dǎo)入了你寫的一個(gè)包,你就可以直接使用包中的任何代碼。這里有一個(gè)類似于Java和.NET的私有和公有的概念,你只可以使用導(dǎo)入的包中的公有的函數(shù)、變量以及自定義類型。Go 語言中區(qū)分公有私有的方法很簡(jiǎn)單,就是查看函數(shù)名、變量名以及自定義類型名的首字母是否為大寫,大寫的即為公有,小寫的為私有。
代碼示例:
package packagetest1
import "fmt"
//定義私有變量name
var name = "Test1"
//PrintName 打印變量name
func PrintName() {
fmt.Println("packagetest1 Name:", name)
}
package packagetest2
import "fmt"
//定義私有變量name
var name = "Test2"
//PrintName 打印變量name
func PrintName() {
fmt.Println("packagetest2 Name:", name)
}
package main
import (
"firstgo/packagetest1"
"firstgo/packagetest2"
)
func main() {
packagetest1.PrintName()//調(diào)用這個(gè)包中的PrintName()函數(shù)
packagetest2.PrintName()//調(diào)用這個(gè)包中的PrintName()函數(shù)
}
執(zhí)行結(jié)果:
你在開發(fā) main 包的代碼時(shí)你會(huì)發(fā)現(xiàn),你只能使用導(dǎo)入包中的 PrintName() 函數(shù),而不能使用包中的 name 變量。就是因?yàn)楹瘮?shù)的首字母是大寫,而變量的首字母是小寫。
4. 小結(jié)
本文主要介紹了 Go 語言中代碼復(fù)用的方法。其中引入了包的概念,需要注意有以下兩個(gè)規(guī)則:
-
包名的命名規(guī)則:
-
- 包名一般都是全小寫;
- 包名不可以是路徑;
- 一個(gè)文件夾下只能有一個(gè)包名;
- 每個(gè)程序的入口包名均為 main ,只有有 main 包,程序才可以執(zhí)行。
-
包中公有和私有的判定規(guī)則:公有首字母大寫,私有首字母小寫。