go 語言中經常使用的包

來自學習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)
}
View Code

 

更短的例子:

package main

import (
    "fmt"
    "io/ioutil"
)

func main() {
    bs, err := ioutil.ReadFile("test.txt")
    if err != nil {
        return
    }

    str := string(bs)
    fmt.Println(str)
}
View Code

怎麼建立一個文件:

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")
}
View Code

爲了獲得一個目錄的內容,咱們使用相同的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())
    }
}
View Code

遞歸遍歷文件夾(讀文件夾的內容,讀取全部的子文件,全部的子子文件,...)

在path/filepath有一個Walk方法能夠簡化這一步驟

 

 

 

 

==========

相關文章
相關標籤/搜索