• go 语言中常用的包


    来自学习go语言.pdf 译者刑星

    ====

    fmt 包fmt实现了格式化IO函数,这与c的printf和scanf类似,格式化短语派生于c

      %v  默认格式的值。当打印结构时,加号(%+v)会增加字段

      %#v   go样式的值表达

      %T  带有类型的go样式的值表达

    io 提供了原始的io操作界面,主要人物就是os包这样的原始的IO进行封装,增加以下其他相关,是器据哟抽象功能在公共的接口上

    bufio  这个包实现了缓冲的io,风中雨io.Reader和io.Write对象,创建了另一个对象(Reader和Writer)在提供缓冲的同时实现了一些文本IO

    功能

    sort  对数组和用户定义集合的原始的排序功能

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

    ==========

  • 相关阅读:
    Average of Levels in Binary Tree
    Maximum Average Subarray I
    Integer Replacement
    Add Digits
    Binary Tree Level Order Traversal II
    Majority Element II
    Majority Element
    匿名函数
    Django的Template不支持range()函数的问题解决办法
    python文件对比利用difflib库实现文件夹下详细内容对比
  • 原文地址:https://www.cnblogs.com/li-daphne/p/5730929.html
Copyright © 2020-2023  润新知