package main
import (
"fmt"
"github.com/gogf/gf/container/gqueue"
"sync"
)
func main() {
// 创建一个普通队列
queue := gqueue.New()
// 创建一个安全队列
safeQueue := gqueue.NewSafe()
// 使用 WaitGroup 同步并发操作
var wg sync.WaitGroup
wg.Add(2)
// 并发向普通队列中添加元素
go func() {
defer wg.Done()
queue.Push(1)
queue.Push(2)
}()
// 并发向安全队列中添加元素
go func() {
defer wg.Done()
safeQueue.Push(3)
safeQueue.Push(4)
}()
// 等待两个 goroutine 完成
wg.Wait()
// 从普通队列中获取元素
fmt.Println("Queue Pop:")
for {
value := queue.Pop()
if value == nil {
break
}
fmt.Println(value)
}
// 从安全队列中获取元素
fmt.Println("\nSafe Queue Pop:")
for {
value := safeQueue.Pop()
if value == nil {
break
}
fmt.Println(value)
}
}
在这个示例中,通过 gqueue.New() 创建了一个普通队列和通过 gqueue.NewSafe() 创建了一个安全队列。两个 goroutine 分别向这两个队列中添加元素,然后分别从这两个队列中取出元素。
gqueue.Queue 和 gqueue.Safe 的基本操作包括:
- Push(value interface{}): 将元素添加到队列的末尾。
- Pop() interface{}: 从队列的头部弹出元素。
- IsEmpty() bool: 判断队列是否为空。
- Size() int: 获取队列中的元素个数。
需要注意的是,gqueue.Queue 不是并发安全的,如果在多个 goroutine 中同时操作同一个队列,可能会导致数据竞争问题。因此,在并发环境中,可以选择使用 gqueue.Safe,它对每个操作都使用了锁,确保在并发环境中的安全性。
在实际应用中,可以根据具体的需求选择适当的队列类型。更多详细的信息和使用示例可以查阅 GoFrame 的官方文档:[GoFrame 官方文档 - gqueue](https://goframe.org/pages/viewpage.action?pageId=1114512)。
转载请注明出处:http://www.zyzy.cn/article/detail/7717/GoFrame