Like Share Discussion Bookmark Smile

J.J. Huang   2025-06-05   Getting Started Golang 07.套件   瀏覽次數:次   DMCA.com Protection Status

Go | 建立與管理自定義套件

💬 簡介

在 Go 語言中,透過自定義套件的拆分與組織,可以讓專案結構更加清晰、維護更為容易。
不論是共用邏輯、工具模組、或是大型功能模組化,套件化設計都是不可或缺的能力。

本篇文章將介紹:

  • 如何建立自定義套件
  • 套件檔案的分割與命名
  • 公開(大寫)與私有(小寫)函式的管理方式

圖片來源:Gophers


🧱 建立自定義套件的基本流程

  • 🛠 建立資料夾與檔案

    每個自定義套件對應一個資料夾,並以該資料夾名稱作為 package 名稱。

    1
    2
    3
    4
    project/
    ├── mathutil/
    │ └── add.go
    ├── main.go
  • ✏️ 撰寫套件內容

    mathutil/add.go

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    package mathutil

    // 公開函式
    func Add(a, b int) int {
    return a + b
    }

    // 私有函式
    func subtract(a, b int) int {
    return a - b
    }

    📝 一個套件中的所有檔案都應使用相同的 package 名稱。

  • 📥 匯入並使用自定義套件

    main.go

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    package main

    import (
    "fmt"
    "example.com/project/mathutil"
    )

    func main() {
    result := mathutil.Add(3, 7)
    fmt.Println(result) // 輸出:10
    }

    📝 自定義套件會根據專案的模組路徑(例如 example.com/project)進行匯入。


🗂 分割檔案與模組化設計

若套件功能較多,可將不同功能拆成多個 .go 檔案,但仍屬於相同 package

1
2
3
4
5
project/
└── mathutil/
├── add.go
├── multiply.go
└── helper.go

mathutil/multiply.go

1
2
3
4
5
package mathutil

func Multiply(a, b int) int {
return a * b
}

mathutil/helper.go

1
2
3
4
5
package mathutil

func square(x int) int {
return x * x
}

📝 套件內多檔案共享相同作用域,可互相呼叫私有函式。


🔒 管理公開與私有函式

Go 語言以首字母大寫代表公開(exported),首字母小寫則為私有(unexported)

1
2
3
4
5
6
7
8
9
// 公開函式,可被 main 或其他套件引用
func Add(a, b int) int {
return a + b
}

// 私有函式,僅限 mathutil 套件內部使用
func subtract(a, b int) int {
return a - b
}

此命名機制有助於維持封裝性與模組責任清晰。

📝 延伸閱讀:Go | 井然有序:解析套件作用域可見性


🚧 小提醒:檔名與型別命名習慣

項目 命名建議
檔案名稱 以功能為名,例如 add.gomath.go
套件名稱 簡短小寫單字,例如 mathutil
公開識別符 大寫開頭,例如 Add()Multiply()
私有識別符 小寫開頭,例如 subtract()square()

💡 保持一致的命名風格,有助於團隊溝通與維護。


🧪 測試自定義套件

自定義套件可直接使用相同 package 撰寫測試:

mathutil/add_test.go

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
package mathutil

import "testing"

func TestAdd(t *testing.T) {
if Add(2, 3) != 5 {
t.Error("Add failed")
}
}

func TestSubtract(t *testing.T) {
if subtract(5, 2) != 3 {
t.Error("subtract failed")
}
}

📝 測試程式與實作程式在同一套件下,可直接存取私有函式。


🎯 總結

建立與管理自定義套件,是 Golang 實作模組化與封裝設計的基礎能力。

本文內容回顧:

  • ✅ 每個套件對應一個資料夾
  • ✅ 套件內檔案須使用相同 package 名稱
  • ✅ 函式首字母大寫為公開,小寫為私有
  • ✅ 可分檔實作功能,保持邏輯清晰
  • ✅ 測試檔案可直接使用私有函式進行驗證

清楚的套件組織,有助於團隊合作、模組重用與系統擴展。

最後建議回顧一下 Go | 菜鳥教學 目錄,了解其章節內容。


註:以上參考了
Go