1. 程式人生 > 其它 >Go 常用內建包簡介

Go 常用內建包簡介

Go 標準庫可以大致按其中庫的功能進行以下粗略的分類

  •     輸入輸出。這個分類包括二進位制以及文字格式在螢幕、鍵盤、檔案以及其他裝置上的輸入輸出等,比如二進位制檔案的讀寫。對應於此分類的包有bufio、 fmt、 io、 log和flag等,其中 flag 用於處理命令列引數。
  •     文字處理。這個分類包括字串和文字內容的處理,比如字元編碼轉換等。對應於此分類的包有encoding、 bytes、 strings、 strconv、 text、 mime、 unicode、 regexp、index和path等。其中path用於處理路徑字串。
  •     網路。這個分類包括開發網路程式所需要的包,比如Socket程式設計和網站開發等。對應於此分類的包有: net、 http和expvar等。
  •     系統。這個分類包含對系統功能的封裝,比如對作業系統的互動以及原子性操作等。對應於此分類的包有os、 syscall、 sync、 time和unsafe等。
  •     資料結構與演算法。對應於此分類的包有math、 sort、 container、 crypto、 hash、archive、 compress和image等。因為image包裡提供的影象編解碼都是演算法,所以也歸入此類。
  •     執行時。對應於此分類的包有: runtime、 reflect和go等。


標準的Go語言程式碼庫中包含了大量的包,並且在安裝 Go 的時候多數會自動安裝到系統中。我們可以在 $GOROOT/src/pkg 目錄中檢視這些包。下面簡單介紹一些我們開發中常用的包。

(1) fmt

    fmt 包實現了格式化的標準輸入輸出,這與C語言中的 printf 和 scanf 類似。其中的 fmt.Printf() 和 fmt.Println() 是開發者使用最為頻繁的函式。
    格式化短語派生於C語言,一些短語(%- 序列)是這樣使用:
    %v:預設格式的值。當列印結構時,加號(%+v)會增加欄位名;
    %#v:Go樣式的值表達;
    %T:帶有型別的 Go 樣式的值表達。

(2) io

    這個包提供了原始的 I/O 操作介面。它主要的任務是對 os 包這樣的原始的 I/O 進行封裝,增加一些其他相關,使其具有抽象功能用在公共的介面上。

(3) bufio


    bufio 包通過對 io 包的封裝,提供了資料緩衝功能,能夠一定程度減少大塊資料讀寫帶來的開銷。
    在 bufio 各個元件內部都維護了一個緩衝區,資料讀寫操作都直接通過快取區進行。當發起一次讀寫操作時,會首先嚐試從緩衝區獲取資料,只有當緩衝區沒有資料時,才會從資料來源獲取資料更新緩衝。

(4) sort
    sort 包提供了用於對切片和使用者定義的集合進行排序的功能。

(5) strconv
    strconv 包提供了將字串轉換成基本資料型別,或者從基本資料型別轉換為字串的功能。

(6) os
    os 包提供了不依賴平臺的作業系統函式介面,設計像 Unix 風格,但錯誤處理是 go 風格,當 os 包使用時,如果失敗後返回錯誤型別而不是錯誤數量。

(7) sync
    sync 包實現多執行緒中鎖機制以及其他同步互斥機制。

(8) flag
    flag 包提供命令列引數的規則定義和傳入引數解析的功能。絕大部分的命令列程式都需要用到這個包。

(9) encoding/json
    JSON 目前廣泛用做網路程式中的通訊格式。encoding/json 包提供了對 JSON 的基本支援,比如從一個物件序列化為 JSON 字串,或者從 JSON 字串反序列化出一個具體的物件等。

(10) html/template
    主要實現了 web 開發中生成 html 的 template 的一些函式。

(11) net/http
    net/http 包提供 HTTP 相關服務,主要包括 http 請求、響應和 URL 的解析,以及基本的 http 客戶端和擴充套件的 http 服務。
    通過 net/http 包,只需要數行程式碼,即可實現一個爬蟲或者一個 Web 伺服器,這在傳統語言中是無法想象的。

(12) reflect
    reflect 包實現了執行時反射,允許程式通過抽象型別操作物件。通常用於處理靜態型別 interface{} 的值,並且通過 Typeof 解析出其動態型別資訊,通常會返回一個有介面型別 Type 的物件。

(13) os/exec
    os/exec 包提供了執行自定義 linux 命令的相關實現。

  (14) strings
    strings 包主要是處理字串的一些函式集合,包括合併、查詢、分割、比較、字尾檢查、索引、大小寫處理等等。
    strings 包與 bytes 包的函式介面功能基本一致。

  (15) bytes
    bytes 包提供了對位元組切片進行讀寫操作的一系列函式。位元組切片處理的函式比較多,分為基本處理函式、比較函式、字尾檢查函式、索引函式、分割函式、大小寫處理函式和子切片處理函式等。

   (16) log
    log 包主要用於在程式中輸出日誌。
    log 包中提供了三類日誌輸出介面,Print、Fatal 和 Panic。
    Print 是普通輸出;
    Fatal 是在執行完 Print 後,執行 os.Exit(1);
    Panic 是在執行完 Print 後呼叫 panic() 方法。

常用包介紹

這裡介紹Go語言標準庫裡使用頻率相對較高的一些包 (如下):

  •     fmt。它實現了格式化的輸入輸出操作,其中的fmt.Printf()和fmt.Println()是開發者使用最為頻繁的函式。
  •     io。它實現了一系列非平臺相關的IO相關介面和實現,比如提供了對os中系統相關的IO功能的封裝。我們在進行流式讀寫(比如讀寫檔案)時,通常會用到該包。
  •     bufio。它在io的基礎上提供了快取功能。在具備了快取功能後, bufio可以比較方便地提供ReadLine之類的操作。
  •     strconv。本包提供字串與基本資料型別互轉的能力。
  •     os。本包提供了對作業系統功能的非平臺相關訪問介面。介面為Unix風格。提供的功能包括檔案操作、程序管理、訊號和使用者賬號等。
  •     sync。它提供了基本的同步原語。在多個goroutine訪問共享資源的時候,需要使用sync中提供的鎖機制。
  •     flag。它提供命令列引數的規則定義和傳入引數解析的功能。絕大部分的命令列程式都需要用到這個包。
  •     encoding/json。 JSON目前廣泛用做網路程式中的通訊格式。本包提供了對JSON的基本支援,比如從一個物件序列化為JSON字串,或者從JSON字串反序列化出一個具體的物件等。
  •     http。它是一個強大而易用的包,也是Golang語言是一門“網際網路語言”的最好佐證。通過http包,只需要數行程式碼,即可實現一個爬蟲或者一個Web伺服器,這在傳統語言中是無法想象的。


完整包列表

轉自: https://blog.csdn.net/Bel_Ami_n/article/details/123593976