writer

package
v0.0.0-...-1781da9 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Dec 20, 2014 License: MIT Imports: 10 Imported by: 1

Documentation

Overview

writer包提供了一组实现io.Writer接口的结构。

Index

Constants

View Source
const Version = "0.1.6.141018"

Variables

This section is empty.

Functions

This section is empty.

Types

type Adder

type Adder interface {
	// 向容器添加一个io.Writer实例
	Add(io.Writer) error
}

io.Writer的容器。

type Buffer

type Buffer struct {
	// contains filtered or unexported fields
}

Buffer 实现对输出内容的缓存,只有输出数量达到指定的值 才会真正地向指定的io.Writer输出。

func NewBuffer

func NewBuffer(w io.Writer, size int) *Buffer

新建一个Buffer。 w最终输出的方向;当size<=1时,所有的内容都不会缓存,直接向w输出。

func (*Buffer) Add

func (b *Buffer) Add(w io.Writer) error

WriterContainer.Add

func (*Buffer) Flush

func (b *Buffer) Flush() (size int, err error)

Flusher.Flush

func (*Buffer) Write

func (b *Buffer) Write(bs []byte) (int, error)

io.Writer

type Console

type Console struct {
	// contains filtered or unexported fields
}

带色彩输出的控制台。

func NewConsole

func NewConsole(w io.Writer, color string) *Console

新建Console实例

color ansi的颜色控制符,有关颜色定义字符串在term包中已经定义。 w 控制台实例,只能是os.Stderr,osStdout,其它将不会显示颜色。

func (*Console) SetColor

func (c *Console) SetColor(color string)

更改输出颜色

func (*Console) Write

func (c *Console) Write(b []byte) (size int, err error)

io.Writer

type Container

type Container struct {
	// contains filtered or unexported fields
}

对WriterContainer的默认实现。

func NewContainer

func NewContainer(writers ...io.Writer) *Container

func (*Container) Add

func (c *Container) Add(w io.Writer) error

func (*Container) Flush

func (c *Container) Flush() (size int, err error)

func (*Container) Write

func (c *Container) Write(bs []byte) (size int, err error)

当某一项出错时,将直接返回其信息,后续的都将中断。

type FlushAdder

type FlushAdder interface {
	Flusher
	Adder
}

type Flusher

type Flusher interface {

	// 将缓存的内容输出
	Flush() (size int, err error)
}

缓存接口

go中并没有提供析构函数的机制,所以想要在对象销毁时自动输出缓存中的内容, 只能定义一个接口。

type Rotate

type Rotate struct {
	// contains filtered or unexported fields
}

可按大小进行分割的文件writer

import "log"
// 每个文件以100M大小进行分割,以日期名作为文件名保存在/var/log下。
f,_ := NewRotate("/var/log", 100*1024*1024)
l := log.New(f, "DEBUG", log.LstdFlags)

func NewRotate

func NewRotate(dir string, size int) (*Rotate, error)

新建Rotate。 dir为文件保存的目录,若不存在会尝试创建。 size为每个文件的最大尺寸,单位为byte。size应该足够大,如果size 的大小不足够支撑一秒钟产生的量,则会继续在原有文件之后追加内容。

func (*Rotate) Clear

func (r *Rotate) Clear() error

清空Rotate.dir目录下所有的内容

func (*Rotate) Close

func (r *Rotate) Close() error

io.WriteCloser.Close

func (*Rotate) Write

func (r *Rotate) Write(buf []byte) (int, error)

io.WriteCloser.Write

type Smtp

type Smtp struct {
	// contains filtered or unexported fields
}

实现io.Writer接口的邮件发送。

func NewSmtp

func NewSmtp(username, password, subject, host string, sendTo []string) *Smtp

新建Smtp对象。 username为smtp的账号; password为smtp对应的密码; subject为发送邮件的主题; host为smtp的主机地址,需要带上端口号; sendTo为接收者的地址。

func (*Smtp) Write

func (s *Smtp) Write(msg []byte) (int, error)

io.Writer

type WriteAdder

type WriteAdder interface {
	Adder
	io.Writer
}

通过io.Writer.Write()输入的内容,会自动各容器中所有的io.Writer实例输出。

type WriteFlushAdder

type WriteFlushAdder interface {
	io.Writer
	Flusher
	Adder
}

type WriteFlusher

type WriteFlusher interface {
	Flusher
	io.Writer
}

通过io.Writer.Write()写入缓存; 通过Flusher.Flush()输出缓存内容。 io.Writer.Write()在缓存满时,也应该能调用Flusher.Flush()自动输出缓存的内容。

Notes

Bugs

  • 缓存smtp.Auth,一般情况下是没有问题,若 smtp.Auth的实现者在实例里保存状态值之类的东西,则不 能缓存只能在每次SendMail的时候实时申请,会造成大量的 内存碎片,可考虑sync.Pool或是直接重写smtp.SendMail() 函数来提升性能。

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL