新聞中心
這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
創(chuàng)新互聯(lián)GoFrame教程:GoFrame gqueue-基本使用
基本使用
package main
import (
"fmt"
"time"
"github.com/GOgf/gf/v2/os/gtimer"
"github.com/gogf/gf/v2/container/gqueue"
)
func main() {
q := gqueue.New()
// 數(shù)據(jù)生產(chǎn)者,每隔1秒往隊(duì)列寫數(shù)據(jù)
gtimer.SetInterval(time.Second, func() {
v := gtime.Now().String()
q.Push(v)
fmt.Println("Push:", v)
})
// 3秒后關(guān)閉隊(duì)列
gtimer.SetTimeout(3*time.Second, func() {
q.Close()
})
// 消費(fèi)者,不停讀取隊(duì)列數(shù)據(jù)并輸出到終端
// 如果隊(duì)列中沒有數(shù)據(jù),則會(huì)阻塞
// 可以結(jié)合select語法進(jìn)行使用
// 例子
// for {
// select {
// case v := <-queue.C:
// if v != nil {
// fmt.Println(v)
// } else {
// return
// }
// }
// }
for {
if v := q.Pop(); v != nil {
fmt.Println(" Pop:", v)
} else {
break
}
}
// 第3秒時(shí)關(guān)閉隊(duì)列,這時(shí)程序立即退出,因此結(jié)果中只會(huì)打印2秒的數(shù)據(jù)。 執(zhí)行后,輸出結(jié)果為:
// Output:
// Push: 2021-09-07 14:03:00
// Pop: 2021-09-07 14:03:00
// Push: 2021-09-07 14:03:01
// Pop: 2021-09-07 14:03:01
}元素入隊(duì)/出隊(duì)
package main
import (
"fmt"
"time"
"github.com/gogf/gf/v2/os/gtimer"
"github.com/gogf/gf/v2/container/gqueue"
)
func main() {
q := gqueue.New()
for i := 0; i < 10; i++ {
q.Push(i)
}
fmt.Println(q.Pop())
fmt.Println(q.Pop())
fmt.Println(q.Pop())
// Output:
// 0
// 1
// 2
}隊(duì)列長(zhǎng)度
package main
import (
"fmt"
"time"
"github.com/gogf/gf/v2/os/gtimer"
"github.com/gogf/gf/v2/container/gqueue"
)
func main() {
q := gqueue.New()
q.Push(1)
q.Push(2)
fmt.Println(q.Len())
// size是len方法的別稱
fmt.Println(q.Size())
// May Output:
// 2
// 2
}隊(duì)列關(guān)閉
package main
import (
"fmt"
"time"
"github.com/gogf/gf/v2/os/gtimer"
"github.com/gogf/gf/v2/container/gqueue"
)
func main() {
q := gqueue.New()
for i := 0; i < 10; i++ {
q.Push(i)
}
fmt.Println(q.Pop())
q.Close()
fmt.Println(q.Pop())
fmt.Println(q.Len())
// Output:
// 0
//
// 0
} gqueue與glist
?gqueue?的底層基于?glist?鏈表實(shí)現(xiàn)動(dòng)態(tài)大小特性,在隊(duì)列滿或者在隊(duì)列空時(shí)讀取數(shù)據(jù)會(huì)產(chǎn)生阻塞。

創(chuàng)新互聯(lián)建站于2013年成立,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項(xiàng)目成都做網(wǎng)站、成都網(wǎng)站建設(shè)網(wǎng)站策劃,項(xiàng)目實(shí)施與項(xiàng)目整合能力。我們以讓每一個(gè)夢(mèng)想脫穎而出為使命,1280元新化做網(wǎng)站,已為上家服務(wù),為新化各地企業(yè)和個(gè)人服務(wù),聯(lián)系電話:18982081108
?glist?是一個(gè)并發(fā)安全的鏈表,并可以允許在關(guān)閉并發(fā)安全特性的時(shí)和一個(gè)普通的list鏈表無異,在存儲(chǔ)和讀取數(shù)據(jù)時(shí)不會(huì)發(fā)生阻塞。
文章名稱:創(chuàng)新互聯(lián)GoFrame教程:GoFrame gqueue-基本使用
本文地址:http://www.5511xx.com/article/cosggpd.html


咨詢
建站咨詢
