1 回答

TA貢獻1876條經驗 獲得超5個贊
對標識符的訪問權限不是細粒度的,您可以指定您授予訪問權限的人。而且沒有必要。這會使使用(源代碼)和實現(編譯時間、編譯包對象和可執行二進制文件大小)變得不必要地復雜化。
如果您只想授予對特定包的訪問權限,最簡單的方法是合并包并使標識符不被導出。
如果你想授予對多個包的訪問權限或者包會變得非常大,你可以使用internal packages。引入了內部包,因此您可以將“大”包分解為多個較小的包,并且仍然隱藏實現細節并保護其免受“外部”(來自其他包)的影響。
內部包可以定義導出標識符,但只允許“內部組”訪問它們。
例如:
├── app
│ ├── app.go
│ ├── handler
│ │ ├── internal
│ │ │ ├── queries
│ │ │ │ └── queries.go
│ │ │ └── foo
│ │ │ └── foo.go
│ │ ├── users.go
│ │ ├── common.go
│ │ └── users.go
│ └── model
│ └── model.go
├── config
│ └── config.go
└── main.go
在此示例中,queries包可由handler包和foo包訪問,但不可由包model或config包訪問。
通常,內部包(internal位于其路徑中有文件夾的文件夾內的包)只能從以該文件夾的父internal文件夾為根的包中導入。
- 1 回答
- 0 關注
- 108 瀏覽
添加回答
舉報