📕
Go 語言程式設計入門
  • 最新消息
  • 中文版更新日誌
  • 譯者誌謝
  • 01-起步走
    • 01.01-檔案與資料夾
    • 01.02-終端機(Terminal)
    • 01.03-文字編輯器
    • 01.04-Go 的工具
  • 02-你的第一個程式
    • 02.01-如何讀 Go 程式
    • 02.02-問題
  • 03-型別
    • 03.01-數字
    • 03.02-字串
    • 03.03-問題
  • 04-變數
    • 04.01-如何命名變數
    • 04.02-Scope(變數的作用範圍)
    • 04.03-常數(Constant)
    • 04.04-定義多個變數
    • 04.05-範例程式
    • 04.06-問題
  • 05-控制結構
    • 05.01-For
    • 05.02-If
    • 05.03-switch
    • 05.04-問題
  • 06-Array、Slice 與 Map
    • 06.01-陣列(Array)
    • 06.02-Slice
    • 06.03-Map
    • 06.04-問題
  • 07-函式
    • 07.01-你的第二個函式
    • 07.02-回傳多個值
    • 07.03-參數個數可變的函式(Variadic Function)
    • 07.04-Closure
    • 07.05-遞迴(Recursive)
    • 07.06-Defer, Panic & Recover
    • 07.07-Panic & Recover
    • 07.08-問題
  • 08-指標
    • 08.01-「*」與「&」運算符號
    • 08.02-new
    • 08.03-問題
  • 09-Struct 與 Interface
    • 09.01-struct
    • 09.02-Method
    • 09.03-Interface
    • 09.04-問題
  • 10-Concurrency(平行處理)
    • 10.01-Goroutine
    • 10.02-Channel
    • 10.03-問題
  • 11-Packages
    • 11.01-建立 Package
    • 11.02-文件
    • 11.03-問題
  • 12-測試
  • 13-The Core Packages
    • 13.01-字串
    • 13.02-輸入與輸出
    • 13.03-檔案與資料夾
    • 13.04-錯誤訊息
    • 13.05-Container 與 Sort
    • 13.06-雜湊&加解密
    • 13.07-伺服器
    • 13.08-解析命令列參數
    • 13.09-Synchronization Primitives(同步處理原始物件)
  • 14-下一步
    • 14.01-閱讀大師作品
    • 14.02-動手實作
    • 14.03-團隊合作
  • 15. 附錄-額外資源
Powered by GitBook
On this page
Edit on GitHub
  1. 11-Packages

11.01-建立 Package

只在另一個程式的上下文(context)使用 packages 是比較合理的。若沒有這個獨立的程式,我們就無法使用我們建立的 package 了。現在我們建立一個應用程式來使用我們撰寫的 package。在資料夾 ~/Go/src/golang-book 中建立一個名為 chapter11 的資料夾,並在該資料夾中建立一個名為 main.go 的檔案,其內容如下:

package main

import "fmt"
import "golang-book/chapter11/math"

func main() {
    xs := []float64{1,2,3,4}
    avg := math.Average(xs)
    fmt.Println(avg)
}

現在我們在 chapter11 資料夾中建立另一個名為 math 的資料夾,並在該資料夾中建立一個 math.go 的檔案,其內容如下:

package math

func Average(xs []float64) float64 {
    total := float64(0)
    for _, x := range xs {
        total += x
    }
    return total / float64(len(xs))
}

開啟終端機,在 math 資料夾中執行 go install,這樣會編譯 math.go 程式,並建立一個可連結的物件檔(object file):~/Go/pkg/os_arch/golang-book/chapter11/math.a(這裡的 os 類似 windows,而 arch 則類似 amd64)

現在我們回到 chapter11 資料夾,並執行 go run main.go,現在應該會得到 2.5。有幾點要注意的事項:

  • math 是一個 package 的名稱,這是 Go 語言在標準發行版本的一部分內容,只是因為 Go 語言的 packages 可以是階層式的,所以我們能安全的在我們自己的 package 中使用同樣的名稱(原本的 math package 就是 math,而我們的則是 golang-book/chapter11/math)

  • 當我們匯入(import)我們自己的 math 函式庫時,我們會使用它的全名(import "golang-book/chapter11/math"),只是在 math.go 檔案中,我們只會使用最後一部分的名稱(package math)。

  • 當從我們的函式庫中參照到函式時,也可以只用 math 這個名稱。如果我們想要在同樣的程式中,同時使用這兩個函式庫時,Go 語言可以使用別名:

    import m "golang-book/chapter11/math"
    
    func main() {
        xs := []float64{1,2,3,4}
        avg := m.Average(xs)
        fmt.Println(avg)
    }

    m 就是別名。

  • 你可能注意到了,package 中的每個函式都是以大寫字母開頭的,這表示其它的 packages (以及程式)都可以看到它。如果我們將函式命名為 average 而不是 Average,則我們的 main 程式就無法看見這個函式。比較好的方式是只揭露我們 package 的一部份內容(我們想要開放給其它 package 使用的),而將其它內容隱藏起來。我們之後可以隨意更改,而不用擔心會破壞到其它程式,而且這樣可以讓我們的 package 易於使用。

  • Package 的名稱會與它們所在的資料夾相同,還有一些方法,不過這個方式是最簡單的。

Previous11-PackagesNext11.02-文件

Last updated 2 years ago