GO標準庫概述

像 fmt、os 等這樣具有常用功能的內置包在 Go 語言中有 150 個以上,它們被稱爲標準庫,大部分(一些底層的除外)內置於 Go 本身。完整列表可以在 Go Walker 查看。

在貫穿本書的例子和練習中,我們都是用標準庫的包。可以通過查閱第 350 頁包中的內容快速找到相關的包的實例。這裏我們只是按功能進行分組來介紹這些包的簡單用途,我們不會深入討論他們的內部結構。

unsafe: 包含了一些打破 Go 語言“類型安全”的命令,一般的程序中不會被使用,可用在 C/C++ 程序的調用中。
syscall-os-os/exec:
os: 提供給我們一個平臺無關性的操作系統功能接口,採用類Unix設計,隱藏了不同操作系統間差異,讓不同的文件系統和操作系統對象表現一致。
os/exec: 提供我們運行外部操作系統命令和程序的方式。
syscall: 底層的外部包,提供了操作系統底層調用的基本接口。
通過一個 Go 程序讓Linux重啓來體現它的能力。

示例 9.1 reboot.go:

package main
import (
    "syscall"
)

const LINUX_REBOOT_MAGIC1 uintptr = 0xfee1dead
const LINUX_REBOOT_MAGIC2 uintptr = 672274793
const LINUX_REBOOT_CMD_RESTART uintptr = 0x1234567

func main() {
    syscall.Syscall(syscall.SYS_REBOOT,
        LINUX_REBOOT_MAGIC1,
        LINUX_REBOOT_MAGIC2,
        LINUX_REBOOT_CMD_RESTART)
}
archive/tar 和 /zip-compress:壓縮(解壓縮)文件功能。
fmt-io-bufio-path/filepath-flag:
fmt: 提供了格式化輸入輸出功能。
io: 提供了基本輸入輸出功能,大多數是圍繞系統功能的封裝。
bufio: 緩衝輸入輸出功能的封裝。
path/filepath: 用來操作在當前系統中的目標文件名路徑。
flag: 對命令行參數的操作。  
strings-strconv-unicode-regexp-bytes:
strings: 提供對字符串的操作。
strconv: 提供將字符串轉換爲基礎類型的功能。
unicode: 爲 unicode 型的字符串提供特殊的功能。
regexp: 正則表達式功能。
bytes: 提供對字符型分片的操作。
index/suffixarray: 子字符串快速查詢。
math-math/cmath-math/big-math/rand-sort:
math: 基本的數學函數。
math/cmath: 對複數的操作。
math/rand: 僞隨機數生成。
sort: 爲數組排序和自定義集合。
math/big: 大數的實現和計算。   
container-/list-ring-heap: 實現對集合的操作。
list: 雙鏈表。
下面代碼演示瞭如何遍歷一個鏈表(當 l 是 *List):

for e := l.Front(); e != nil; e = e.Next() {
    //do something with e.Value
}
- `ring`: 環形鏈表。
time-log:
time: 日期和時間的基本操作。
log: 記錄程序運行時產生的日誌,我們將在後面的章節使用它。
encoding/json-encoding/xml-text/template:
encoding/json: 讀取並解碼和寫入並編碼 JSON 數據。
encoding/xml:簡單的 XML1.0 解析器,有關 JSON 和 XML 的實例請查閱第 12.9/10 章節。
text/template:生成像 HTML 一樣的數據與文本混合的數據驅動模板(參見第 15.7 節)。
net-net/http-html:(參見第 15 章)
net: 網絡數據的基本操作。
http: 提供了一個可擴展的 HTTP 服務器和基礎客戶端,解析 HTTP 請求和回覆。
html: HTML5 解析器。
runtime: Go 程序運行時的交互操作,例如垃圾回收和協程創建。
reflect: 實現通過程序運行時反射,讓程序操作任意類型的變量。
exp 包中有許多將被編譯爲新包的實驗性的包。它們將成爲獨立的包在下次穩定版本發佈的時候。如果前一個版本已經存在了,它們將被作爲過時的包被回收。然而 Go1.0 發佈的時候並不包含過時或者實驗性的包。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章