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方法能够简化这一步骤

 

 

 

 

==========

相关文章
相关标签/搜索