1 Star 1 Fork 0

vincent/gcutil

加入 Gitee
与超过 1400万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
queue.go 1.01 KB
一键复制 编辑 原始数据 按行查看 历史
vincent 提交于 2020-09-29 15:45 +08:00 . go upgrade & http & thread
package manager
type Queue struct {
PoolSize int
PoolChan chan interface{}
}
func NewQueue(size int) *Queue {
return &Queue{
PoolSize: size,
PoolChan: make(chan interface{}, size),
}
}
func (this *Queue) Init(size int) *Queue {
this.PoolSize = size
this.PoolChan = make(chan interface{}, size)
return this
}
func (this *Queue) Push(i interface{}) bool {
if len(this.PoolChan) == this.PoolSize {
return false
}
this.PoolChan <- i
return true
}
func (this *Queue) PushSlice(s []interface{}) {
for _, i := range s {
this.Push(i)
}
}
func (this *Queue) Pull() interface{} {
return <-this.PoolChan
}
// 二次使用Queue实例时,根据容量需求进行高效转换
func (this *Queue) Exchange(num int) (add int) {
last := len(this.PoolChan)
if last >= num {
add = int(0)
return
}
if this.PoolSize < num {
pool := []interface{}{}
for i := 0; i < last; i++ {
pool = append(pool, <-this.PoolChan)
}
// 重新定义、赋值
this.Init(num).PushSlice(pool)
}
add = num - last
return
}
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
Go
1
https://gitee.com/vincent78/gcutil.git
git@gitee.com:vincent78/gcutil.git
vincent78
gcutil
gcutil
v1.0.1

搜索帮助