前端之家收集整理的这篇文章主要介绍了
Golang1.8使用slice实现先进进出功能,
前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
@H_502_2@package cache
import (
"fmt"
)
type lists struct {
count @H_502_2@int
@H_502_2@pop @H_502_2@int
@H_502_2@last @H_502_2@int
@H_502_2@index @H_502_2@int
list []@H_502_2@int
}
func (l *lists) Add(i @H_502_2@int) {
l.list[l.@H_502_2@last] = i
l.@H_502_2@last += 1
@H_502_2@if l.@H_502_2@last >= l.count {
l.@H_502_2@last = l.@H_502_2@index
@H_502_2@if l.@H_502_2@index >= l.count {
l.@H_502_2@index = 0
}
}
}
func (l *lists) Pop() @H_502_2@int {
@H_502_2@if l.@H_502_2@pop < l.@H_502_2@index {
l.@H_502_2@pop = l.@H_502_2@index
@H_502_2@return l.list[l.@H_502_2@pop]
}
i := l.list[l.@H_502_2@pop]
l.@H_502_2@pop += 1
@H_502_2@if l.@H_502_2@pop >= 10 {
l.@H_502_2@pop = 0
}
@H_502_2@return i
}
func cmain() {
count := 10
l := lists{count: count,list: make([]@H_502_2@int,count)}
@H_502_2@for i := 1; i < 11; i++ {
l.Add(i)
}
fmt.Printf("%+v\n",l)
@H_502_2@for i := 0; i < 5; i++ {
fmt.Println(l.Pop())
}
@H_502_2@for i := 11; i < 21; i++ {
l.Add(i)
}
fmt.Printf("%+v\n",l)
@H_502_2@for i := 0; i < 5; i++ {
fmt.Println(l.Pop())
}
@H_502_2@for i := 21; i < 31; i++ {
l.Add(i)
}
fmt.Printf("%+v\n",l)
@H_502_2@for i := 0; i < 10; i++ {
fmt.Println(l.Pop())
}
}
原文链接:https://www.f2er.com/go/188853.html