iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 13
1
Software Development

啥物碗Golang? 30天就Go系列 第 13

包 package

我不知道台灣的翻譯是什麼,暫時沿用中國對Package的翻譯為「包」。包跟Ruby裡面的Gem一樣,是將寫好的程式封裝,然後可以將裡面的方法與函數分享共用。這麼說回來,其實我也不知道Gem的中文應該要翻譯成什麼(顯然不該直譯為寶石吧),或許根本就沒有翻譯名稱吧?

昨天我們第一次使用了內建以外的包,雖然實作網路專案或許不一定需要使用整包網路框架,但是使用一些便利的包還是無可避免。當我們寫了一些便利的功能,可能也想要打包起來在不同專案之間共用,甚至推上github與所有人分享,我們來看看怎麼實現這件事。

自定義的Package

我們用簡單的判斷奇數、偶數為例子:

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)

Reference


上一篇
進階取得路徑中參數的方法
下一篇
Post 表單
系列文
啥物碗Golang? 30天就Go30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言