37.筆記go語言——包
包是函式和資料的集合。用package保留字定義乙個包。檔名不需要與包名一致。包名的約定是使用小寫字元。go包可以由多個檔案組成,但是使用相同的package 這一行。讓我們在檔案even.go中定義乙個叫做even的包。
名稱以大寫字母起始的是可匯出的,可以在包的外部呼叫.
在go中,當函式的首字母大寫的時候,函式會被從包中匯出(在包外部可見,或者說公有的)
概括來說:
•公有函式的名字以大寫字母開頭;
•私有函式的名字以小寫字母開頭。
這個規則同樣適用於定義在包中的其他名字(新型別、全域性變數)。注意,「大寫」的含義並不僅限於us ascii,它被擴充套件到了整個unicode範圍。所以大寫的希臘語、古埃及語都是可以的。
像在其他語言中一樣,go的命名是很重要的。在某些情況下,它們甚至有語義上的作用:例如,在包外是否可見決定於首字母是不是大寫。因此有必要花點時間討論一下go程式的命名規則。
當包匯入(通過import)時,包名成為了內容的入口。在import "bytes"之後,匯入包的可以呼叫函式bytes.buffer。任何使用這個包的人,可以使用同樣的名字訪問到它的內容,因此這樣的包名是好的:短的、簡潔的、好記的。
根據規則,包名是小寫的乙個單詞;不應當有下劃線或混合大小寫。由於每個人都可能需要錄入這個名字,所以盡可能的簡短。不要提前考慮衝突。包名是匯入的預設名稱。
在go中使用混合大小寫mixedcaps或者mixedcaps,而不是下劃線區分含有多個單詞的名字。
每個包都應該有包注釋,在package前的乙個注釋塊。對於多檔案包,包注釋只需要出現在乙個檔案前,任意乙個檔案都可以。包注釋應當對包進行介紹,並提供相關於包的整體資訊。這會出現在go doc生成的關於包的頁面上,並且相關的細節會一併顯示。
每個定義(並且匯出)的函式應當有一小段文字描述該函式的行為。
在go中為包編寫單元測試應當是一種習慣。編寫測試需要包含testing包和程式go test。兩者都有良好的文件。
在編寫包的時候應當一邊寫**,一邊寫(一些)文件和測試函式。這可以讓你的程式更好,並且它展示了你的努力。
標準的go**庫中包含了大量的包,並且在安裝go的時候多數會伴隨一起安裝。瀏覽$goroot/src/pkg目錄並且檢視那些包會非常有啟發。
包fmt實現了格式化的i/o函式,這與c的printf和scanf類似。格式化短語派生於c。一些短語(%-序列)這樣使用:
%v預設格式的值。當列印結構時,加號(%+v)會增加欄位名;
%#vgo樣式的值表達;
%t帶有型別的go樣式的值表達;
這個包提供了原始的i/o操作介面。它主要的任務是對os包這樣的原始的i/o進行封裝,增加一些其他相關,使其具有抽象功能用在公共的介面上。
這個包實現了緩衝的i/o。它封裝於io.reader和io.writer物件,建立了另乙個物件(reader和writer)在提供緩衝的同時實現了一些文字i/o的功能。
sort包提供了對陣列和使用者定義集合的原始的排序功能。
strconv包提供了將字串轉換成基本資料型別,或者從基本資料型別轉換為字串的功能。
os包提供了與平台無關的作業系統功能介面。其設計是unix形式的。
sync包提供了基本的同步原語,例如互斥鎖。
flag包實現了命令列解析。
encoding/json包實現了編碼與解碼rfc 4627 [5]定義的json物件。
資料驅動的模板,用於生成文字輸出,例如html。
將模板關聯到某個資料結構上進行解析。模板內容指向資料結構的元素(通常結構的字段或者map的鍵)控制解析並且決定某個值會被顯示。模板掃瞄結構以便解析,而「游標」 @決定了當前位置在結構中的值。
net/http實現了http請求、響應和url的解析,並且提供了可擴充套件的http服務和基本的http客戶端。
unsafe包包含了go程式中資料型別上所有不安全的操作。通常無須使用這個。
reflect包實現了執行時反射,允許程式通過抽象型別操作物件。通常用於處理靜態型別inte***ce{}的值,並且通過typeof解析出其動態型別資訊,通常會返回乙個有介面型別type的物件。
os/exec包執行外部命令。
55 筆記go語言 go型別
很多人喜歡go語言的原因是簡單。go語言的型別也是設計的如此簡單。go語言預設定義了一些型別如boolean,numeric和string.這些預定義的型別用於構建其他複雜的型別,例如array,struct,pointer,slice,map,channel等。型別可以有乙個名字也可以沒有名字。命...
10 筆記go語言 併發
10.筆記go語言 併發 goroutine 是由 go 執行時環境管理的輕量級執行緒。go f x,y,z 開啟乙個新的 goroutine 執行 f x,y,z f x y 和 z 是當前 goroutine中定義的,但是在新的 goroutine 中執行 f goroutine 在相同的位址空...
Go 語言包的概念
golang 包的理解 在 golang 中,使用包是一件常見的事,包的本質實際上就是建立不同的資料夾,來存放程式檔案。個人理解大概相當於 php 的命名空間的概念。golang 的每乙個檔案都屬於乙個包,也就是說go是以包的形式來管理檔案和專案目錄結構的。golang 包的三大作用 區分相同名字的...