Skip to main content

Go 保留字

internal

Go 的 internal 是一個保留目錄名稱,用於限制套件(package)的可見性與匯入範圍。

規則說明

當專案目錄結構中出現 internal 資料夾時:

  • 允許匯入internal 底下的套件只能被與該 internal 同層或上層的程式碼匯入
  • 禁止匯入:其他 repository、其他 Go module 無法匯入 internal 內的套件
my-project/
├── go.mod
├── main.go
├── internal/
│ ├── util/
│ │ └── util.go
│ └── config/
│ └── config.go
└── pkg/
└── public/
└── public.go
  • main.gopkg/public/public.go 可以 import "my-project/internal/util"
  • 另一個 repo(例如 other-repo)的程式碼無法 import "my-project/internal/util",編譯會失敗

典型錯誤訊息

若外部專案嘗試匯入 internal 套件,會出現類似:

use of internal package xxx/internal/yyy not allowed

使用時機

  • 僅供本專案使用的邏輯放在 internal,避免對外暴露實作細節
  • 將對外提供的公開 API 放在 pkg/ 或專案根目錄的套件

與 pkg 的差異

目錄可見範圍
internal/僅限同一 module 內部
pkg/可被其他 module 匯入(若路徑正確)

透過 internal,可以明確區分「私有實作」與「公開 API」。