Go 常用标准库

Go官方以包的形式提供功能丰富的标准库,了解这些包会让你在项目开发中如鱼得水。Go标准库很容易理解,其组织结构和命名都很人性化,日常使用时翻找大多能找到通用的功能。Go中文网标准库翻译

下面列举以下几个常用的标准包:

1.fmt

fmt包实现了类似C语言printf和scanf的格式化I/O。
一般用于打印输出,其内置了很多非常强大的格式化符合,通过预定义文本格式可以得到任何你想要的输出结果。

常用方法:

方法签名

方法作用

fmt.Errorf(format, args…)

返回一个包含所给的的格式胡字符串以及 args 参数的错误值

fmt.Fprint(writer, args…)

按照格式 %v 和空格分割的非字符串将 args 写入 writer 中,返回写入的字节数和一个值为 error 或者 nil 的错误值

fmt.Fprintf(writer, format, args…)

按照字符串格式 format 将 args 写入 writer, 返回写入的字节数和一个值为 error 或者 nil 的错误值

fmt.Print(args…)

使用格式 %v 以空格分割的非字符串将 args 写入 os.Stdout,返回写入的字节数和一个值为 error 或者 nil 的错误值

fmt.Printf(format, args…)

使用格式化字符串 format 将 args 写入 os.Stdout

fmt.Println(args…)

使用格式 %v 以空格分割以换行符结尾将参赛 args 写入 os.Stdout

fmt.Sprint(args…)

返回 args 参数组成的字符串

fmt.Sprintf(format, args…)

返回格式 format 格式化的 args 字符串

fmt.Sprintln(args…)

返回使用格式 %v 格式化 args 后的字符串

import "fmt"
func BasePkgFmt() {
    var s string = "gofuncchan"
    //1.Print族:输出到stdout
    //直接输出
    fmt.Print(s)
    //格式化输出
    fmt.Printf("prefix + %v",s)
    //自动换行输出
    fmt.Println("go func chan")
    
    //2.Sprint族:不输出stdout,直接返回接收
    //格式化后返回给变量接收
    fmtStr := fmt.Sprintf("prefix + %v",s)
    //...
    
    //3.Fprint族:用于IO的输出,讲格式化的数据写入Writer
    dst, e := os.OpenFile("/path/to/demo.txt", os.O_CREATE|os.O_WRONLY, 0666)
    if e != nil {
        fmt.Println("打开文件错误:", e)
        return
    }
    defer dst.Close()
    fmt.Fprintf(dst,"prefix + %v",s")
    
    //其他操作可参考官方文档...
}
2.os

os包提供了操作系统函数的不依赖平台的接口。

import (
    "fmt"
    "os"
)

func BasePkgOS() {
    //获得当前工作路径:默认当前工程根目录
    fmt.Println(os.Getwd())
    //获得指定的环境变量
    fmt.Println(os.Getenv("PATH"))
    //获得所有环境变量
    fmt.Println(os.Environ())
    //(在网络中的)主机名
    fmt.Println(os.Hostname())
    //获得系统的临时文件夹路径
    fmt.Println(os.TempDir())
    //判断某字符是否路径分隔符
    fmt.Println(os.IsPathSeparator('/'))
    //获得文件信息
    fileInfo, err := os.Stat("/Users/fun/Code/mygo/bin/main")
    println(err)

    fmt.Println(fileInfo.IsDir())
    fmt.Println(fileInfo.Mode())
    fmt.Println(fileInfo.ModTime())
    fmt.Println(fileInfo.Name())
    fmt.Println(fileInfo.Size())
    fmt.Println(fileInfo.Sys())

}
3.time

time包提供了时间的显示和测量用的函数。日历的计算采用的是公历。

import (
    "fmt"
    "time"
)

func BasePkgTime() {
    now := time.Now()

    //年月日
    fmt.Println(now.Year())
    fmt.Println(now.Month())
    fmt.Println(now.Day())

    y, m, d := now.Date()
    fmt.Println(y, "-", m, "-", d)

    //周月年中的第几天
    fmt.Println(now.Day())
    fmt.Println(now.YearDay())
    fmt.Println(now.Weekday())

    //时分秒
    fmt.Println(now.Hour())
    fmt.Println(now.Minute())
    fmt.Println(now.Second())
    fmt.Println(now.Nanosecond())

    //创建时间
    date := time.Date(2019, 3, 2, 17, 00, 00, 00, time.Now().Location())
    fmt.Println(date)

    //一天之前
    //创建时间区间
    duration, _ := time.ParseDuration("-24h0m0s") //解析时间区间
    fmt.Println(now.Add(duration))                

    //一周之前
    fmt.Println(now.Add(duration * 7))

    //一月之前
    fmt.Println(now.Add(duration * 30))

    //计算时间差
    fmt.Println("时间差=", now.Sub(time.Date(1969, time.December, 31, 0, 0, 0, 0, time.Now().Location())))
}
4.string

对字符串的处理:

  • 检索子串
  • 大小写格式化
  • 比较大小
  • 裁剪
  • 炸碎
  • 拼接
import (
    "fmt"
    "strings"
)

func BasePkgStrings() {
    var s string = "一起 go func chan!"

    //检索子串
    fmt.Println(strings.Contains(s, "go"))
    fmt.Println(strings.ContainsAny(s, "yyy"))

    //大小写格式化
    fmt.Println(strings.ToLower(s))
    fmt.Println(strings.ToUpper(s))
    fmt.Println(strings.ToTitle(s))

    //比较大小
    fmt.Println(strings.Compare(s, "一起 go func chan!"))
    fmt.Println(strings.Compare(s, "一起 Go Func Chan!"))
    fmt.Println(strings.Compare(s, "一起 go"))

    //裁剪
    fmt.Println(strings.TrimSpace("    一起 go func chan    "))
    fmt.Println(strings.Trim(s, "go"))
    fmt.Println(strings.TrimFunc(s, func(r rune) bool {
        if r == '一' {
            return true
        }
        return false
    }))

    //炸碎
    fmt.Println(strings.Split(s, " "))
    fmt.Println(strings.SplitAfter("一起,Golang", ","))
    fmt.Println(strings.SplitN("asdf,asfa,asdfas,sdfasdf,sdfa", ",", 2))

    //拼接
    fmt.Println(strings.Join([]string{"safsa", "asdfas", "asfas", "aasdfasdfsgas"}, "66666!!!!!"))

}