Go Book / 1 Go Basics / 22 Go 常用标准库简析

22 Go 常用标准库简析

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!!!!!"))

}