go标准库03 路径与文件

2017-09-28 12:22:53
  • os包
    提供系统相关函数

    1
    2
    3
    4
    5
    6
    7
    8
    9
    import (
    "fmt"
    "os"
    )
    func main() {
    dir, _ := os.Getwd()
    fmt.Println("current dir:", dir)
    fmt.Println(os.Geteuid())
    }

    此外,还有os.Getenv(),os.Chdir(),)os.Stat(),os.Chmod(),os.Chtime(),os.Environ(),os.Exit(),os.Expand(),os.ExpandEnv(),os.Hostname()等,详细介绍请查看这里

  • io包
    io包提供了大量的输入输出相关的函数,用来处理io.Reader和io.Writer.(*os.File类型的值能同时满足这两个接口的定义).另外,这个包还能用来创建内存中的同步管道.
    io/ioutil包提供一些高级的辅助函数.
    在io包中最重要的是两个接口:Reader和Writer接口

    1
    2
    3
    4
    5
    6
    7
    type Reader interface {
    Read(p []byte) (n int, err error)
    }

    type Writer interface {
    Write(p []byte) (n int, err error)
    }

    Read 将 len(p) 个字节读取到 p 中,当遇到任何错误(包括EOF)会立即返回已读取的字节数,函数结束会返回成功读取的字节数和任何错误。
    Write 将 len(p) 字节数据从 p 写入底层的数据流,然后返回成功写入的字节数和任何错误。
    从接口名称很容易猜到,一般地,Go中接口的命名约定:接口名以er结尾。
    注意,这里并非强行要求,你完全可以不以 er 结尾。标准库中有些接口也不是以 er 结尾的

  • path包
    path包用来操作unix风格的路径
    path/filepath包提供了和path相同的函数,其目标是提供平台无关的路径处理,提供了filepath.Walk()函数来遍历读出一个给定路径下的所有文件和目录信息

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    package main

    import (
    "fmt"
    "path/filepath"
    )

    func main() {

    absName, err := filepath.Abs("/a/b/c.txt")
    if err != nil {
    fmt.Println(err)
    }
    fmt.Println(absName)

    baseName := filepath.Base("/a/b/c/e.txt")
    fmt.Println(baseName)

    p := "../..//././//a/b/c.txt"
    pc := filepath.Clean(p)
    fmt.Println(pc)

    d := filepath.Dir("/a/b/c/d.txt")
    fmt.Println(d)

    e, _ := filepath.EvalSymlinks("/home/tiger/abc")
    fmt.Println(e)

    f := filepath.Ext("/tmp/1.txt")
    fmt.Println(f)

    m, _ := filepath.Glob("/usr/*")
    fmt.Println(m)

    fmt.Println("On Unix:")
    fmt.Println(filepath.Join("a", "b", "c"))
    fmt.Println(filepath.Join("a", "b/c"))
    fmt.Println(filepath.Join("a/b", "c"))
    fmt.Println(filepath.Join("a/b", "/c"))
    }

    此外,还有 Split(), Walk()等

  • runtime包
    runtime包含一些函数和类型,用来访问go语言的运行时系统
    这里介绍几个跟平台有关的方法:NumCPU ,GOROOT ,GOOS ,GOMAXPROCS ,Gosched
    func NumCPU() int
    func GOROOT() string
    func GOMAXPROCS(n int) int
    func Gosched()
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    package main

    import (
    "fmt"
    "runtime"
    )

    func main() {
    fmt.Println("cpus:", runtime.NumCPU())
    fmt.Println("goroot:", runtime.GOROOT())
    fmt.Println("os/platform:", runtime.GOOS)
    }

您的鼓励是我写作最大的动力

俗话说,投资效率是最好的投资。 如果您感觉我的文章质量不错,读后收获很大,预计能为您提高 10% 的工作效率,不妨小额捐助我一下,让我有动力继续写出更多好文章。