在go語言中是通過包來管理源碼的,我們平時會用各種各樣的第三方源碼包來構建自己的程序,那麼如何編寫一個定製的源碼包呢?這要求我們知道一些關於源碼包結構的基本理論。首先,回顧我們平時使用源碼包的過程,比如"fmt"包,
-
通過import "fmt"導入源碼包
-
通過fmt.Println()調用源碼包裏的方法
在這裏,"fmt"是一個相對路徑,它的絕對路徑是:$GOPATH/src/fmt,在這個路徑下至少有一個叫xxx.go的文件,在這個文件裏面有一條package fmt語句,以及一個Println()方法。從這裏可以看出,源碼包的路徑名稱和包所在的文件名稱沒有聯繫,它們是一對多的關係,而且在一個源碼包的路徑下還可以有下一級目錄。事實上,源碼包的路徑、包所在的文件名、包名三者之間沒有任何聯繫,它們的名稱可以不同,也就是我們可以創建下面這樣的一個包:
[zhoumin@computer2 src]$ tree $GOPATH/src/a
/home/zhoumin/go/dev/src/a
└── b.go
0 directories, 1 file
在這裏,我們創建的這個包的路徑是: $GOPATH/src/a, 該路徑下有一個叫做b.go的文件。
[zhoumin@computer2 src]$ cat $GOPATH/src/a/b.go
package c
import "fmt"
func D() {
fmt.Println("I'm in method D() in package c at file $GOPATH/src/a/b.go")
}
在b.go中有一條“package c”語句,表明這個文件所在的包名叫做“c”,該文件中還有一個叫做D()的方法,該方法的首字母大寫,表明該方法是一個導出方法,可被其他包使用。
那麼,我們可以按照以下方式來使用這個包:
package main
import "a" //指明包的路徑名
func main() {
//使用 “包名.方法名()” 的方式來使用包
//不管是在導入包,還是使用包中的方法,用戶都不必知道 b.go文件的存在
c.D()
}