包是函數(shù)和數(shù)據(jù)的集合,用 package 關(guān)鍵字定義一個(gè)包。
主要用于組織 Go 源代碼,提供了更好的可重用性與可讀性。由于包提供了代碼的封裝,因此使得 Go 應(yīng)用程序易于維護(hù)。
下面創(chuàng)建一個(gè)自定義包的實(shí)例
創(chuàng)建存放包的目錄pac
mkdir -p $GOPATH/src/test/pac cd $GOPATH/src/test/pac
新建文件pac.go
package pac import "fmt" func Printstr(x string) { fmt.Println(x + " is pac") }
此處為了便于維護(hù),將包名和目錄名一致。
新建demo.go調(diào)用自定義的包
在$GOPATH/src/test 目錄下創(chuàng)建
package main import "pac" func main() { pac.Printstr("this") }
運(yùn)行
go run demo.go
輸出 this is pac ,證明成功
以上實(shí)例,引入文件demo.go和包文件pac.go不在同一目錄,不屬于同一個(gè)包。那么屬于同一個(gè)包,且在同一個(gè)目錄的兩個(gè)文件,是如何訪問(wèn)的,看下面例子。
創(chuàng)建 pac2.go
在$GOPATH/src/test/pac目錄下
package pac import "fmt" func printstr2 (x string) { fmt.Println(x + " is pac2") }
修改pac.go,讓pac.go調(diào)用pac2.go
package pac func Printstr(x string) { //fmt.Println(x + " is pac") printstr2(x) }
運(yùn)行 demo.go
go run demo.go
輸出結(jié)果:this is pac2
總結(jié)
1、 如果項(xiàng)目目錄不在GOPATH環(huán)境變量設(shè)置的路徑里,需要把項(xiàng)目移到GOPATH路徑里,或者GOPATH中把項(xiàng)目路徑設(shè)置進(jìn)去;不然會(huì)報(bào):
demo.go:3:8: cannot find package "pac" in any of: /usr/lib/golang/src/pac (from $GOROOT) /home/go/src/pac (from $GOPATH)
2、import語(yǔ)句使用的是文件夾的名稱。
3、包文件的函數(shù)名第一個(gè)字母大寫,這樣外部可以調(diào)用。如果同一個(gè)package下,所有文件之間相互訪問(wèn),函數(shù)名第一個(gè)字母大寫小寫無(wú)所謂。
4、main包,不能訪問(wèn)同目錄,同main包其他文件。
5、文件夾的名稱和package的名稱不一定相同,為了便于維護(hù),建議一致。
6、調(diào)用自定義包使用package名稱.函數(shù)名的方式,如上例:
pac.Printstr("this")