我不知道台灣的翻譯是什麼,暫時沿用中國對Package的翻譯為「包」。包跟Ruby裡面的Gem一樣,是將寫好的程式封裝,然後可以將裡面的方法與函數分享共用。這麼說回來,其實我也不知道Gem的中文應該要翻譯成什麼(顯然不該直譯為寶石吧),或許根本就沒有翻譯名稱吧?
昨天我們第一次使用了內建以外的包,雖然實作網路專案或許不一定需要使用整包網路框架,但是使用一些便利的包還是無可避免。當我們寫了一些便利的功能,可能也想要打包起來在不同專案之間共用,甚至推上github與所有人分享,我們來看看怎麼實現這件事。
我們用簡單的判斷奇數、偶數為例子:
package test
func Even(i int) bool {
return i % 2 == 0
}
func Odd (i int) bool {
return i % 2 == 1
}
這邊要特別注意,函數名稱開頭必須是大寫,這樣才能被識別是全域函數,小寫開頭會被視為是私有函數,只能在這個包內使用。儲存為同名的test.go
之後,存在$GOPATH/src/test
內,接著打開命令行:
$ go build test
$ go install test
這樣就完成了自有的包安裝囉,是不是很簡單。在引用的只要加上包的名稱:
package main
import (
"fmt"
"test"
)
func main() {
i := 2
fmt.Printf("Is %d even? %v\n", i, test.Even(i))
}
引入後使用的規則是package_name.Function_name()
,在這個例子中就是test.Even(i)
。引入時可以加上別名,這樣就可以覆寫原本的包的命名空間,例如:
package main
import (
"fmt"
tool "test"
)
func main() {
i := 2
fmt.Printf("Is %d even? %v\n", i, tool.Even(i))
}
我們將原本的包命名為tool
,這樣取用時改為tool.Even(i)
。