Golang 常用标准库

1,841 阅读5分钟

sync

提供了基本的同步原语。在多个goroutine访问共享资源的时候,需要使用sync中提供的锁机制。

os

提供了对操作系统功能的非平台相关访问接口。接口为Unix风格。提供的功能包括文件操作、进程管理、信号和用户账号等。

1、Hostname   主机名 如:os.Hostname() 结果:localhost.localdomain <nil>
2、Getpagesize 返回底层的系统内存页的尺寸  如:os.Getpagesize() 结果:4096
3、Environ  查看环境变量 如:os.Environ()
4、Getenv  获取环境变量的值 如:os.Getenv("SHELL") 结果:/bin/bash
5、Setenv 设置环境变量  如:os.Setenv("a", "b") //设置环境变量a值为b
6、Clearenv  删除所有环境变量  如:os.Clearenv()
7、Exit  退出程序,并返回给的状态码   如:os.Exit(2)  结果:exit status 2
8、Getuid 调用者的用户ID  如:os.Getuid()//使用的root 结果:0
9、Geteuid 调用者的有效用户ID 如:os.Geteuid() 结果:0
10、Getgid 调用者的组ID  如:os.Getgid() 结果:0
11、Getegid 调用者的有效组ID  如:os.Getegid() 结果:0
12、Getgroups 调用者所属的所有用户组的组ID 如:os.Getgroups() 结果:[0] <nil>
13、Getpid 调用者所在进程的进程ID 如:os.Getpid() 结果:116742
14、Getppid 调用者所在进程的父进程的进程ID 如:os.Getppid() 结果:116725
15、Getwd   当前所在路径(类似shell的pwd) 如:os.Getwd() 结果:/data/go <nil>
16、Chdir 更改当前所在目录(类似shell的cd) 如:os.Chdir("/tmp/")  //切换到/tmp目录下
17、Mkdir  创建目录(shell的mkdir一样) 如:os.Mkdir("/tmp/test")
18、MkdirAll  递归创建目录(shell的mkdir -p) 如:os.MkdirAll("/tmp/test1/test2/test3")
19、Rename  更改文件或目录的名字 如:os.Rename("/tmp/test1", "/tmp/test2")
20、Remove  删除文件或目录  如:os.Remove("/tmp/test2/test2") 
21、RemoveAll 递归删除 如:os.RemoveAll("/tmp/test1/")
22、Create  创建文件,存在会清空  如:os.Create("/tmp/test")
23、Open  打开文件 如:os.Open("/tmp/test") 

time

时间相关的处理

1、Now 当前时间 如:time.Now() 结果:2019-03-04 15:33:25.044013971 +0800 CST m=+0.000231204
2、Unix 时间戳  如:time.Now().Unix() 结果:1551684901
3、Stamp  时间(没有年月日,只精确到s) 如:time.Stamp 结果:Jan _2 15:04:05
4、Date  指定时间  如:time.Date(2008, time.November, 11, 23, 0, 0, 0, time.UTC) 结果:2008-11-11 23:00:00 +0000 UTC
5、Format 格式输出时间 如:time.Now().Format("2006-1-02 15:04:05" ) //必须使用这个时间才行2006-1-02 15:04:05  结果:2019-3-04 15:48:01
6、ParseDuration   添加或减少时间 例如:t,_ := time.ParseDuration("-10m") //小时为-10h ,天为
   Println(time.Now().Add(t))   结果: 2019-03-04 15:55:21.436413622 +0800 CST m=-599.999598120
7、Sleep   睡眠时间, time.Second为秒 如:time.Sleep(time.Second*10) 睡眠10秒

fmt

实现格式化的输入输出操作。

io

实现了一系列非平台相关的IO相关接口和实现,比如提供了对os中系统相关的IO功能的封装。我们在进行流式读写(比如读写文件)时,会用到该包。

bufio

在io的基础上提供了缓存功能。在具备了缓存功能后, bufio可以比较方便地提供ReadLine之类的操作。

strconv

提供字符串与基本数据类型互转的能力

flag

提供命令行参数的规则定义和传入参数解析的功能。

http

提供web服务

string

处理字符串的一些函数集合,包括合并、查找、分割、比较、后缀检查、索引、大小写处理等等。

bytes

bytes 包提供了对字节切片进行读写操作的一系列函数。字节切片处理的函数比较多,分为基本处理函数、比较函数、后缀检查函数、索引函数、分割函数、大小写处理函数和子切片处理函数等。

reflect

reflect 包实现了运行时反射,允许程序通过抽象类型操作对象。通常用于处理静态类型 interface{} 的值,并且通过 Typeof 解析出其动态类型信息,通常会返回一个有接口类型 Type 的对象。

context

简化 对于处理单个请求的多个 goroutine 之间与请求域的数据、取消信号、截止时间等相关操作,这些操作可能涉及多个 API的相互调用。

context.Context是一个接口,该接口定义了四个需要实现的方法。具体签名如下:

type Context interface {
    Deadline() (deadline time.Time, ok bool)
    Done() <-chan struct{}
    Err() error
    Value(key interface{}) interface{}
}
  • Deadline方法需要返回当前Context被取消的时间,也就是完成工作的截止时间(deadline);
  • Done方法需要返回一个Channel,这个Channel会在当前工作完成或者上下文被取消之后关闭,多次调用Done方法会返回同一个Channel;
  • Err方法会返回当前Context结束的原因,它只会在Done返回的Channel被关闭时才会返回非空的值; 如果当前Context被取消就会返回Canceled错误; 如果当前Context超时就会返回DeadlineExceeded错误;
  • Value方法会从Context中返回键对应的值,对于同一个上下文来说,多次调用Value 并传入相同的Key会返回相同的结果,该方法仅用于传递跨API和进程间跟请求域的数据;

四个With函数:

func WithCancel(parent Context) (ctx Context, cancel CancelFunc)
func WithDeadline(parent Context, deadline time.Time) (Context, CancelFunc)
func WithTimeout(parent Context, timeout time.Duration) (Context, CancelFunc)
func WithValue(parent Context, key, val interface{}) Context

注意事项:

  • 推荐以参数的方式显示传递Context
  • 以Context作为参数的函数方法,应该把Context作为第一个参数。
  • 给一个函数方法传递Context的时候,不要传递nil,如果不知道传递什么,就使用context.TODO()
  • Context的Value相关方法应该传递请求域的必要数据,不应该用于传递可选参数
  • Context是线程安全的,可以放心的在多个goroutine中传递