Go基礎:路徑、檔名和包名的關係
工具與資源中心
幫助開發者更加高效的工作,提供圍繞開發者全生命週期的工具與資源
https://developer.aliyun.com/tool/?spm=a1z389.11499242.0.0.65452413KFoX5Y&utm_content=g_1000295017
Go 包的概念
- 把相同的功能放到一個目錄,稱之為包
- 包可以被其他的包引用
- main包用來生成可執行檔案,每個程式只有一個main包
- 包可以提高程式碼的可複用性
Go 包 的特徵
一個資料夾下只能有一個package。
- import後面的其實是GOPATH開始的相對目錄路徑,包括最後一段。但由於一個目錄下只能有一個package,所以import一個路徑就等於是import了這個路徑下的包。
- 注意,這裡指的是“直接包含”的go檔案。如果有子目錄,那麼子目錄的父目錄是完全兩個包。
- 比如你實現了一個計算器package,名叫calc,位於calc目錄下;但又想給別人一個使用範例,於是在calc下可以建個example子目錄(calc/example/),這個子目錄裡有個example.go(calc/example/example.go)。 此時,example.go可以是main包,裡面還可以有個main函式。
一個package的檔案不能在多個資料夾下。
在 Golang 的文件中,Language Specification 頁面,Package clause 下,指明瞭
A set of files sharing the same PackageName form the implementation of a package. An implementation may require that all source files for a package inhabit the same directory.也就是說,一個包所有的檔案,必須位於同一個目錄下
- 如果多個資料夾下有重名的package,它們其實是彼此無關的package。
- 如果一個go檔案需要同時使用 不同目錄下的同名package,需要 在import這些目錄時為每個目錄指定一個package的別名。
包名自然可以和資料夾名不一樣,畢竟一個是匯入路徑,一個是包名
但不建議這麼做,這樣容易造成呼叫這個包的人,無法快速知道這個包的名稱是什麼
至於為什麼不用目錄名作為包名,我想也正如大家所說,為了避免目錄中出現奇怪的字元,也為了呼叫者方便使用
在 Golang 的文件中, Language Specification 頁面,Import declarations 下,有這樣的說明
在 中有對
PackageName
和ImportPath
的具體描述:
ImportDecl = "import" ( ImportSpec | "(" { ImportSpec ";" } ")" ) . ImportSpec = [ "." | PackageName ] ImportPath . ImportPath = string_lit .
The PackageName is used in qualified identifiers to access exported identifiers of the package within the importing source file. It is declared in the file block. If the PackageName is omitted, it defaults to the identifier specified in the package clause of the imported package. If an explicit period (.) appears instead of a name, all the package’s exported identifiers declared in that package’s package block will be declared in the importing source file’s file block and must be accessed without a qualifier.
也就是說,在執行匯入的時候,若不手動定義包名,則從匯入路徑的原始碼檔案中的 package 行獲取包名,也即目錄名和包名沒有直接的關係。
結論
1、import 匯入的引數是路徑,而非包名。
2、儘管習慣將包名和目錄名保證一致,但這不是強制規定;
3、在程式碼中引用包成員時,使用包名而非目錄名;
4、同一目錄下,所有原始檔必須使用相同的包名稱(因為匯入時使用絕對路徑,所以在搜尋路徑下,包必須有唯一路徑,但無須是唯一名字);
5、至於檔名,更沒啥限制(副檔名為.go)
本文轉自:https://developer.aliyun.com/article/791779?spm=a2c6h.12873581.0.0.6b4c767d002AhB&groupCode=othertech
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70003733/viewspace-2792985/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Java中類名與檔名的關係Java
- LINUX 下讓Tomcat支援中文路徑名和中文檔名LinuxTomcat
- 更改archive log 歸檔路徑和歸檔檔名稱Hive
- LINUX所有配置檔案的路徑和檔名稱(收藏)Linux
- 獲取絕對路徑下的檔名和檔案字尾方法
- package-make 新增自定義包的名稱空間和生成路徑Package
- go package包名規範GoPackage
- Sql Server使用者名稱和登入名的關係總結SQLServer
- go mod 的使用及解答學習以來的疑惑(go mod 目錄、包名、import之間的關係)GoImport
- 基於路徑的實體圖關係抽取模型模型
- 修改Oracle資料檔名及資料檔案存放路徑Oracle
- C# Winform中如何獲取檔名與檔案路徑C#ORM
- IP_別名、路徑_別名、路徑_wwid及開機啟動設定
- R語言中提取檔名和檔名R語言
- 檔案路徑類 字串的各種擷取方式,包括擷取到檔名字串
- 圖片隱藏真實的檔名及路徑的方法探討
- Android Studio修改專案名和包名Android
- 使用名稱空間:基礎
- GO語言————4.1 檔名、關鍵字與識別符號Go符號
- react ts 專案如何配置路徑別名?React
- 【cocos2dx】改安裝包名、app名、圖示、包名APP
- 最最基礎的乾貨:Linux中的絕對路徑和相對路徑Linux
- [06 Go語言基礎-包]Go
- 4.3.2.2 關於CDB Root和PDB$SEED檔案的名稱和位置
- Linux基礎命令---alias別名Linux
- 內網基礎名詞解釋內網
- php中basename()函式返回路徑中的檔名部分PHP函式
- 檔案型別和副檔名型別
- Go日誌,列印原始碼檔名和行號造成的效能開銷Go原始碼
- JS基礎-函式、物件和原型、原型鏈的關係JS函式物件原型
- Linux檔案的路徑定位-相對路徑和絕對路徑Linux
- 關閉eslintrc的檔名檢測EsLint
- Eclipse 如何快速修改工程名及包名Eclipse
- 在CMD視窗中使用javac和java命令進行編譯和執行帶有包名的具有繼承關係的類Java編譯繼承
- 『學了就忘』Linux基礎 — 14、Linux系統的裝置檔名和掛載Linux
- C# 獲取檔名及副檔名C#
- webpack + ts 配置路徑別名無死角方法總結Web
- iOS開發:相對路徑與相對工程名iOS