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