1. 程式人生 > >關於golang中包(package)的二三事兒

關於golang中包(package)的二三事兒

golang的package和其他語言的組織方式完全不同,剛開始接觸時,很不適應。

golang的package的特點:

1、go的package不侷限於一個檔案,可以由多個檔案組成。

  組成一個package的多個檔案,編譯後實際上和一個檔案類似,組成包的不同檔案相互之間可以直接引用變數和函式,不論是否匯出;

  因此,組成包的多個檔案中不能有相同的全域性變數和函式(這裡有一個例外就是包的初始化函式:init函式,下面還有討論)

2、go不要求package的名稱和所在目錄名相同,但是你最好保持相同,否則容易引起歧義。因為引入包的時候,go會使用子目錄名作為包的路徑,而你在程式碼中真正使用時,卻要使用你package的名稱。

3、每個子目錄中只能存在一個package,否則編譯時會報錯。

4、go的package是以絕對路徑GOPATH來定址的,不要用相對路徑來import

關於package的初始化函式init的說明:(主要參考大俠在某貼中的回覆,我經過試驗確實如此)

每個package中應該是每個init都會被呼叫,且順序固定
1、對同一個go檔案的init()呼叫順序是從上到下的
2、對同一個package中不同檔案是按檔名字串比較“從小到大”順序呼叫各檔案中的init()函式,對於
3、對不同的package,如果不相互依賴的話,按照main包中"先import的後呼叫"的順序呼叫其包中的init()
4、如果package存在依賴,則先呼叫最早被依賴的package中的init()

相關推薦

關於golangpackage事兒

golang的package和其他語言的組織方式完全不同,剛開始接觸時,很不適應。 golang的package的特點: 1、go的package不侷限於一個檔案,可以由多個檔案組成。   組成一個package的多個檔案,編譯後實際上和一個檔案類似,組成包的不同檔案相互之間可以直接引用變數和函式,不論

Pythonpackage的調用方式

inf none 普通 bfd 是否 open usr -a pack                      Python中包(package)的調用方式                                           作者:尹正傑 版權聲明:原創

2.2 Javapackage

為了更好地組織類,Java 提供了包機制,用於區別類名的名稱空間。 包的作用 1、把功能相似或相關的類或介面組織在同一個包中,方便類的查詢和使用。 2、如同資料夾一樣,包也採用了樹形目錄的儲存方式。同一個包中的類名字是不同的,不同的包中的類的名字是可以相同的,當同時呼叫兩個

javapackage命名規則,Javapackage的命名規範

Java的包名都有小寫單片語成,類名首字母大寫;包的路徑符合所開發的 系統模組的 定義,比如生產對生產,物資對物資,基礎類對基礎類。以便看了包名就明白是哪個模組,從而直接到對應包裡找相應的實現。       由於Java面向物件的特性,每名J

Javapackage的命名規範,javapackage命名規則

 Java的包名都有小寫單片語成,類名首字母大寫;包的路徑符合所開發的 系統模組的 定義,比如生產對生產,物資對物資,基礎類對基礎類。以便看了包名就明白是哪個模組,從而直接到對應包裡找相應的實現。     由於Java面向物件的特性,每名Java開發人員都可以編寫屬於

LaTeX-手動安裝宏package以及生成幫助文檔的整套流程

tor hang width 下載地址 ner file href win 7 blog 我使用的是ctex套裝,本來已經自帶了許多package,但是有時候還是需要使用一些沒有預裝的宏包,這時就需要自己安裝package了。下載package可以從CTAN(Compreh

PyCharm在同一個package下,如何把一個.py文件導入另外一個.py文件下

通過 targe aid lis clear 返回 href baidu 文件導入 PyCharm在同一個包(package)下,如何把一個.py文件導入另外一個.py文件下 在同一個包下只需要用import 掉以後就可以找到模塊所在的位置,但是如果不在同一個包下,在需

ubuntu 軟件package更換源source為阿裏雲鏡像 update&upgrade

main -s 估計 更新 source 16px 電腦 clas 訪問   在ubuntu下用apt-get install安裝軟件時,發現package list中沒有所需的軟件, 估計可能是package list太舊了,於是需要apt-get update &a

protobuf入門教程(五):列舉(enum)、package

列舉(enum) 訊息格式 當需要定義一個訊息型別的時候,可能想為一個欄位指定某“預定義值序列”中的一個值,這時候可以通過列舉實現。 syntax = "proto3";//指定版本資訊,不指定會報錯 message Person //message為關鍵字,作用為定義一種訊息型別 {

Javapackage的命名規範&規則 2018年03月21日 03:23:11 InjoyMario 閱讀數:8202 標籤: Javapackag

Java包(package)的命名規範&規則 2018年03月21日 03:23:11 InjoyMario 閱讀數:8202 標籤: Javapackage 更多 個人分類: Java基礎知識 java中的打包機制是為

JAVA:不同package的類之間如何呼叫import

【1】問題描述 Java由於應用了package的機制,將不同的類存放在不同 的類名空間中,如果不同包之間互相呼叫其中的類時,該怎麼辦呢,是直接呼叫還是有什麼其他方法呢? 【2】屬於不同包的類之間的呼叫方法 程式1:Test.java packa

山科java實驗2-1 設計一個名為figure的圖形軟體package

設計一個名為figure的圖形軟體包(package)。包中包含三角形、矩形、圓三個類。要求:(1)每個類都要構造方法併為成員設定get和set方法;(2)每個類都要有計算周長和麵積的成員方法;(3)完

Intellij IDEA建立package問題解決方案

問題 在使用IDEA建立包時會出現這樣一種場景,就是當一個空包很長時,比如com.secbro.drools.model。這個時候如果你想給drools或model建立同級的包,你會發現,預設建立的包不是同級的,而是在model下面的。 如下圖,如果建立dr

python數據分析工具4——matplotlib

end ots mage color 學習 繪制線 使用方法 art otl     前一篇文章,介紹了如何用matplotlib繪制一些簡單的圖。通常在圖上需要添加很多的標註信息,如添加圖例。 1 import matplotlib.pyplot as plt 2

Ologn叉樹的意義----高性能(四)

aid 算法 二分 研究 ask 是什麽 htm 時間 question 轉載地址:https://zhidao.baidu.com/question/239708227508660244.html?qbl=relate_question_2&word=%CA%B1

package/import/protected

什麼是包? 因為在同一資料夾中,不能出現同名檔案,包的出現是避免同名檔案問題,就是定義不同的包,在不同的包可存在相同的資料夾。包的本質是資料夾。包的存在是為了更好的管理檔案。 簡單定義一個包: package www.code; public class Pack { publi

區塊鏈事兒技術篇

一 前言 區塊鏈的開始,還要提一箇中國人–戴偉,可以去他的網站(www.weidai.com)上看看他關於B-Money的文章。中本聰在論文《比特幣:一種點對點網路中的電子現金》中的第一個引用者就是戴偉。十年來,區塊鏈的概念早已飛入尋常百姓家。 挖個坑,認知區塊鏈需要如下四步:

劍指offer演算法題維陣列的查詢

劍指offer演算法題(一) 題目1:二維陣列中的查詢 在一個二維陣列中,每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成一個函式,輸入這樣的一個二維陣列和一個整數,判斷陣列中是否含有該整數。 思路分析:  從左上往右下方來解決這個問題  例如在

判斷資料是否服從某一分佈——簡單易用fitdistrplus轉發

文章轉發自https://www.cnblogs.com/ywliao/p/6297162.html 一、對資料的分佈進行初步判斷     1.1 原理         對於不同的分佈,有特定的

區塊鏈技術基礎語言:Go語言常用工具

原文連結:區塊鏈技術基礎語言(三十):Go語言常用工具包(下) 一、JSON處理 JSON(JavaScript Object Notation)是一種輕量級的資料交換格式,方便人們閱讀和編寫,也方便程式地解析和生成。雖然JSON是JavaScript的子集,但其格式完全獨立於程式語言,表現