Browse Tag: 标准库

Go 标准库介绍六: log

本文介绍Go 标准库 log 的常用导出函数,结构体及方法。

log 包实现了简单的日志服务,log 包定义了Logger类型,该类型提供了一些格式化输出的方法。本包也提供了一个预定义的“标准”Logger,可以通过辅助函数Print[f|ln]、Fatal[f|ln]和Panic[f|ln]访问,比手工创建一个Logger对象更容易使用。Logger会打印每条日志信息的日期、时间,默认输出到标准错误。Fatal系列函数会在写入日志信息后调用os.Exit(1)。Panic系列函数会在写入日志信息后调用panic。

1. Logger 结构体

Logger 结构体定义:

Logger 类型表示一个记录日志的对象,它会生成一行行的输出写入一个io.Writer 接口。每一条日志操作会调用一次io.Writer 接口的Write 方法。Logger 类型的对象可以被多个线程安全的同时使用,它会保证对io.Writer 接口的顺序访问。

  • func New(out io.Writer, prefix string, flag int) *Logger // 创建一个Logger, out设置日志信息写入的目的地, prefix 添加到生成的每一条日志前面, flag定义日志的属性
  • func (l *Logger) Flags() int // Flags返回logger的输出选项
  • func (l *Logger) SetFlags(flag int) // SetFlags设置logger的输出选项
  • func (l *Logger) Prefix() string // Prefix返回logger的输出前缀
  • func (l *Logger) SetPrefix(prefix string) // SSetPrefix设置logger的输出前缀
  • func (l *Logger) Output(calldepth int, s string) error // 输出一条日志
  • func (l *Logger) Printf(format string, v ...interface{}) // 将生成的格式化字符串输出到out
  • func (l *Logger) Fatal(v ...interface{}) // Fatal等价于{l.Print(v…); os.Exit(1)}
  • func (l *Logger) Panic(v ...interface{}) // Panic等价于{l.Print(v…); panic(…)}

2. log 导出函数

log 导出函数基于预定义的 std 变量 var std = New(os.Stderr, "", LstdFlags) 实现。

  • func Flags() int // 获取预定义“标准”日志输出属性
  • func Prefix() string // 获取预定义“标准”日志前缀
  • func SetOutput(w io.Writer) // 设置预定义“标准”日志输出位置
  • func Print(v ...interface{}) // 打印一条标准日志

3. 代码示例

$GOPATH/src/github.com/ironxu/go_note/library/log/log.go 源码如下:

参考

可以关注我的微博了解更多信息: @刚刚小码农

Go 标准库介绍五: io

本文介绍Go 标准库 io 常用的导出函数,结构体和方法。

io 包提供了对 I/O 原语的基本接口,这些接口抽象出了泛用的函数并附加了一些操作。因为这些接口是对底层实现完全不同的低水平操作的包装,除非得到其它方面的通知,客户端不应假设它们是并发安全的。

1. io 包的接口

Reader

Reader 接口用于包装基本的读取方法。Read 方法读取 len(p) 字节数据写入p。它返回写入的字节数和遇到的任何错误。即使Read方法返回值 n < len(p),本方法在被调用时仍可能使用p的全部长度作为暂存空间。如果有部分可用数据,但不够len(p)字节,Read会返回可以读取到的数据,而不是等待更多数据。

Writer

Writer 接口用于包装基本的写入方法。Write 方法将 len(p) 字节数据从p写入底层的数据流。它会返回写入的字节数据(0 <= n <= len(p)) 和遇到的任何导致写入提取结束的错误。如果它返回的 n < len(p), Write必须返回非nil的错误。

type Closer

Closer 接口用于包装基本的关闭方法。

Seeker

Seeker 接口用于包装基本的移位方法。Seek方法设定下一次读写的位置:偏移量为offset,校准点由whence确定:0表示相对于文件起始;1表示相对于当前位置;2表示相对于文件结尾。Seek方法返回新的位置以及可能遇到的错误。

ReaderAt

ReaderAt 接口包装了基本的ReadAt方法。ReadAt从底层输入流的偏移量off位置读取len(p) 字节数据写入p, 它返回读取的字节数(0 <= n <= len(p)) 和遇到的任何错误。

ByteReader

ByteReader 是基本的ReadByte方法的包装。ReadByte读取输入中的单个字节并返回。如果没有字节可读取,会返回错误。

ByteScanner

ByteScanner 接口在基本的ReadByte 方法之外还添加了UnreadByte方法。UnreadByte方法让下一次调用ReadByte时返回之前调用ReadByte时返回的同一个字节。连续调用两次UnreadByte方法而中间没有调用ReadByte时,可能会导致错误。

ReaderFrom

ReaderFrom 接口包装了基本的ReadFrom方法。ReadFrom 方法从r 读取数据直到EOF或者遇到错误。返回值n是读取的字节数,执行时遇到的错误(EOF除外)也会被返回。

相应还有 write 类接口,不一一列举

1.1 LimitedReader

LimitedReader 从R中读取数据,但限制可以读取的数据的量为最多N 字节,每次调用Read方法都会更新N 以标记剩余可以读取的字节数。

  • func LimitReader(r Reader, n int64) LimitedReader // 创建一个 LimitedReader
  • func (l *LimitedReader) Read(p []byte) (n int, err error)

1.2 SectionReader

SectionReader 实现了对底层满足ReadAt 接口的输入流某个片段的Read、ReadAt、Seek方法。

  • func NewSectionReader(r ReaderAt, off int64, n int64) *SectionReader // 返回一个从r中的偏移量off处为起始,读取n个字节后以停止的SectionReader
  • func (s *SectionReader) Size() int64 // Size返回该片段的字节数

2. io 导出函数

  • func WriteString(w Writer, s string) (n int, err error) // 将字符串s的内容写入w中
  • func Copy(dst Writer, src Reader) (written int64, err error) // 将src的数据拷贝到dst,直到在src上到达EOF或发生错误。返回拷贝的字节数和遇到的第一个错误

$GOPATH/src/github.com/ironxu/go_note/library/io/io.go 源码如下:

参考

可以关注我的微博了解更多信息: @刚刚小码农

Go 标准库介绍四: path

本文介绍Go 标准库: path, filepath 常用导出函数,结构体及方法

1. path 包

path实现了对斜杠分隔的路径进行操作的函数。

  • func IsAbs(path string) bool // 判断是否是一个绝对路径
  • func Split(path string) (dir, file string) // 将路径分割为路径和文件名
  • func Join(elem ...string) string // 将多个字符串合并为一个路径
  • func Ext(path string) string // 返回路径中扩展部分
  • func Base(path string) string // 返回路径的最后一个元素
  • func Dir(path string) string // 返回路径中目录部分
  • func Clean(path string) string // 返回同目录的最短路径
  • func Match(pattern, name string) (matched bool, err error) // 正则是否匹配路径(shell 文件名匹配)

$GOPATH/src/github.com/ironxu/go_note/library/path/path.go 代码如下:

2. path/filepath 包

filepath 包实现了兼容各操作系统的文件路径操作函数。

  • filepath.Separator // 预定义变量,表示路径分隔符 /
  • filepath.ListSeparator // 预定义变量,表示环境变量分隔符 :
  • func Abs(path string) (string, error) // 返回path 相对当前路径的绝对路径
  • func Clean(path string) string // 返回path 的最短路径
  • func Rel(basepath, targpath string) (string, error) // 返回targpath 相对 basepath路径
  • func EvalSymlinks(path string) (string, error) // 返回软链指向的路径
  • func VolumeName(path string) string // 返回路径最前面的卷名
  • func ToSlash(path string) string // 路径分隔符替换为 /
  • func FromSlash(path string) string // / 替换为路径分隔符
  • func SplitList(path string) []string // 分隔环境变量里面的路径
  • func Walk(root string, walkFn WalkFunc) error // 遍历 root 目录下的文件树,并调用 walkFn

$GOPATH/src/github.com/ironxu/go_note/library/path/filepath.go 代码如下:

参考

可以关注我的微博了解更多信息: @刚刚小码农

  • 1
  • 2