func (c *Clise) Slice() (dst []interface{}) {
	var (
		start int
		end   int = c.size
	)
	if c.over {
		dst = make([]interface{}, c.size)
		start = c.last
	} else {
		dst = make([]interface{}, c.last)
		end = c.last
	}
	c.Lock()
	copy(dst, c.v[start:end])
	if c.over {
		copy(dst[end-start:], c.v[0:start])
	}
	c.Unlock()
	return dst
}
Slice return the content of circular slice as slice in the order of the
last item to the recent item.
package clise
import "sync"
type Clise struct {
	sync.Mutex
	v    []interface{}
	size int
	last int
	over bool
}
func New(size int) (c *Clise) {
	if size <= 0 {
		return nil
	}
	c = &Clise{
		v:    make([]interface{}, size),
		size: size,
	}
	return c
}
func (c *Clise) Pop() (item interface{}) {
	c.Lock()
	if c.over {
		if c.last == 0 {
			c.last = c.size - 1
		} else {
			c.last--
		}
	} else {
		if c.last == 0 {
			c.Unlock()
			return nil
		}
		c.last--
	}
	item = c.v[c.last]
	c.v[c.last] = nil
	c.Unlock()
	return item
}
func (c *Clise) Push(src ...interface{}) {
	c.Lock()
	for x := 0; x < len(src); x++ {
		c.v[c.last] = src[x]
		c.last++
		if c.last == c.size {
			c.last = 0
			c.over = true
		}
	}
	c.Unlock()
}
func (c *Clise) RecentSlice() (dst []interface{}) {
	c.Lock()
	dst = make([]interface{}, c.last)
	copy(dst, c.v[:c.last])
	c.Unlock()
	return dst
}
func (c *Clise) Reset() {
	c.Lock()
	c.last = 0
	c.over = false
	c.Unlock()
}