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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 2.7.3 spfile的預設名稱和路徑
- package-make 新增自定義包的名稱空間和生成路徑Package
- go mod 的使用及解答學習以來的疑惑(go mod 目錄、包名、import之間的關係)GoImport
- 基於路徑的實體圖關係抽取模型模型
- 修改Oracle資料檔名及資料檔案存放路徑Oracle
- Android Studio修改專案名和包名Android
- R語言中提取檔名和檔名R語言
- 圖片隱藏真實的檔名及路徑的方法探討
- 關閉eslintrc的檔名檢測EsLint
- 最最基礎的乾貨:Linux中的絕對路徑和相對路徑Linux
- GO語言————4.1 檔名、關鍵字與識別符號Go符號
- react ts 專案如何配置路徑別名?React
- 『學了就忘』Linux基礎 — 14、Linux系統的裝置檔名和掛載Linux
- 4.3.2.2 關於CDB Root和PDB$SEED檔案的名稱和位置
- Linux基礎命令---alias別名Linux
- Linux檔案的路徑定位-相對路徑和絕對路徑Linux
- 檔案型別和副檔名型別
- Go日誌,列印原始碼檔名和行號造成的效能開銷Go原始碼
- JS基礎-函式、物件和原型、原型鏈的關係JS函式物件原型
- [06 Go語言基礎-包]Go
- 內網基礎名詞解釋內網
- rac中文名檔名新增到本地路徑解決辦法(ORA-01157)-非歸檔
- webpack + ts 配置路徑別名無死角方法總結Web
- 檔案路徑問題( ./ 和 ../ 和 @/ )
- gcc g++ 新增標頭檔案路徑和庫檔案路徑的方法GC
- 零基礎入門Python的路徑Python
- Python批量修改檔名和檔案型別Python型別
- 【集合論】關係閉包 ( 關係閉包求法 | 關係圖求閉包 | 關係矩陣求閉包 | 閉包運算與關係性質 | 閉包複合運算 )矩陣
- 設計模式-UML關係基礎設計模式
- JSP規範、Servlet關係、基礎JSServlet
- Java基礎7:關於Java類和包的那些事Java
- Webpack 中css 如何 import 使用 alias別名 相對路徑WebCSSImport
- 【vue-cli 3.0】 vue.config.js配置 – 路徑別名VueJS
- win10提示找不到指定檔案,請確定指定的路徑及檔名是否正確如何解決Win10
- 閉包和一部電影的關係
- android檢視當前應用的的包名和activityAndroid
- [重慶思莊每日技術分享]-ORACLE DG物理備庫使用別名資料檔案改變路徑到OMF路徑Oracle
- eclipse 並沒有 改變錯誤包名 和 改變錯誤類名 的快捷鍵!Eclipse