测试
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 | package main import ( "errors" "fmt" "sync" "time" ) type Element struct { V int Pre *Element Next *Element } type List struct { Len int Head *Element Tail *Element m sync.RWMutex } func (l *List) Push(v int) { l.m.Lock() defer l.m.Unlock() e := &Element{V: v} if l.Head == nil { l.Head = e } else { l.Tail.Next = e e.Pre = l.Tail } l.Tail = e l.Len = l.Len + 1 } var errEmpty = errors.New( "空了!" ) func (l *List) Pop() (v int, err error) { l.m.Lock() defer l.m.Unlock() if l.Tail == nil { err = errEmpty } else { v = l.Tail.V l.Tail = l.Tail.Pre if l.Tail == nil { l.Head = nil } l.Len = l.Len - 1 } return v, err } func main() { list := new(List) /* for i := 0; i < 10; i++ { list.Push(i) } */ go list.Push(1) go list.Push(2) go list.Push(3) go list.Push(4) go list.Push(5) time.Sleep(time.Second * 2) fmt.Println( "qian:" , list) for v, err := list.Pop(); err == nil; v, err = list.Pop() { fmt.Printf( "%v\n" , v) } fmt.Println( "hou:" , list) } |
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步