來自學習go語言.pdf 譯者刑星html
====json
fmt 包fmt實現了格式化IO函數,這與c的printf和scanf相似,格式化短語派生於c數組
%v 默認格式的值。當打印結構時,加號(%+v)會增長字段安全
%#v go樣式的值表達數據結構
%T 帶有類型的go樣式的值表達ide
io 提供了原始的io操做界面,主要人物就是os包這樣的原始的IO進行封裝,增長如下其餘相關,是器據喲抽象功能在公共的接口上函數
bufio 這個包實現了緩衝的io,風中雨io.Reader和io.Write對象,建立了另外一個對象(Reader和Writer)在提供緩衝的同時實現了一些文本IO學習
功能編碼
sort 對數組和用戶定義集合的原始的排序功能url
strconv 提供了將字符串轉換爲基本數據類型,或者從基本數據類型轉換爲字符串的功能
os 提供了與平臺無關的操做系統功能接口,設計爲unix形式的
sync sync提供了基本的同步原語,例如互斥鎖
flag 實現了命令解析
encoding/json 實現了編碼和解碼定義的json對象
html/template 數據驅動的模板,用於生成文本輸出,例如html
將模板關聯到數據結構上進行解析。模板內容指向數據結構的元素(一般結構的字段或者map的鍵)控制解析而且決定某個值會顯示。模板掃描結構以便解析,而遊標決定了當前位置雜結構中的值。
net/http 實現了http請求、相應和url解析,而且提供了可擴展的HTTP服務和基本的http客戶端。
unsafe unsafe包含了Go程序中類型上全部不安全的操做。經過無須使用這個。
reflect 實現了運行時反射,容許程序經過抽象類型操做對象。經過用於處理靜態類型interface{}的值,而且經過typeof解析出器動態類型信息,一般會返回一個有接口類型Type的對象。
ox/exec 包執行外部命令
===================
go語言核心包
1,strings
go語言在strings包中包含許多處理strings的方法,好比:
strings.Contains/Count/HasPrefix/HasSuffix/Index/Join/Repeat/Replace/Split/ToLower/ToUpper
有時候咱們須要將一些字符串轉換爲二進制,或者將一些二進制轉換爲字符串
arr := []byte("test")
str := string([]byte{'a','b','c','e'})
2,Input/Output
io package 包含一些函數,另外有一些interface在其餘的包中。
io package中主要的兩個接口是Reader和Writer,Reader支持經過Read方法讀,Writer支持經過Write方法寫。
go語言中許多函數利用Reader or Writers做爲參數。例如,io包有一個Copy函數,能將data從Reader copy到Writer。
func Copy(dst Writer, src Reader) (written int64, err error){}
---
爲了從[]byte或 string 中讀/寫,能夠利用在bytes包中的Buffer結構體
\\-1
var buf bytes.Buffer
buf.Write([]byte("test"))
buffer並無被初始化,而且支持Reader和Writer接口。你能夠調用buf.Bytes()將buffer轉化爲[]byte
\\-2
若是你只能從string中讀取,你可使用strings.NewReader方法,它比使用buffer要高效。
=========
Files 和Folders
在Go中使用os包中Open方法能夠打開一個文件。
這裏有一個例子:怎麼讀取文件中的內容,並將其打印到terminal中:
package main import ( "fmt" "os" ) func main() { file, err := os.Open("test.txt") if err != nil { //handle the error here return } defer file.Close() //get the file size stat, err := file.Stat() if err != nil { return } //read the file bs := make([]byte, stat.Size()) _, err = file.Read(bs) if err != nil { return } str := string(bs) fmt.Println(str) }
更短的例子:
package main import ( "fmt" "io/ioutil" ) func main() { bs, err := ioutil.ReadFile("test.txt") if err != nil { return } str := string(bs) fmt.Println(str) }
怎麼建立一個文件:
package main import ( "os" ) func main() { file, err := os.Create("test.txt") if err != nil { //handle the error here return } defer file.Close() file.WriteString("xxxxx test file") }
爲了獲得一個目錄的內容,咱們使用相同的os.Open函數,可是參數是一個目錄路徑,而不是文件名字
調用Readdir方法:
package main import ( "fmt" "os" ) func main() { dir, err := os.Open(".") if err != nil { return } defer dir.Close() fileInfos, err := dir.Readdir(-1) if err != nil { return } for _, fi := range fileInfos { fmt.Println(fi.Name()) } }
遞歸遍歷文件夾(讀文件夾的內容,讀取全部的子文件,全部的子子文件,...)
在path/filepath有一個Walk方法能夠簡化這一步驟
==========