Golang rxgo庫的具體使用
關(guān)鍵總結(jié)
可以類比Java Stream流式編程,Observable就好比Stream。
兩張重要的圖告訴你如何使用rxgo:
每個(gè)方法都會返回一個(gè)channel,然后別人可以消費(fèi)這個(gè)channel

如下是FlatMap的用法(可類比Java Stream的flatMap):

FlatMap就是將一個(gè)流中的每個(gè)元素都映射成另一個(gè)流,并且將所有的流都合并進(jìn)行扁平化處理。
示例代碼
簡單示例:
func main() {
observable := rxgo.Just(1, 2, 3, 4, 5)()
ch := observable.Observe()
for item := range ch {
fmt.Println(item.V)
}
}
FromChannel可以直接從一個(gè)已存在的<-chan rxgo.Item對象中創(chuàng)建 Observable:
func main() {
ch := make(chan rxgo.Item)
go func() {
for i := 1; i <= 5; i++ {
ch <- rxgo.Of(i)
}
close(ch)
}()
observable := rxgo.FromChannel(ch)
for item := range observable.Observe() {
fmt.Println(item.V)
}
}
也可以使用Create方法:
// Create creates an Observable from scratch by calling observer methods programmatically.
func Create(f []Producer, opts ...Option) Observable {
return &ObservableImpl{
iterable: newCreateIterable(f, opts...),
}
}
傳入一個(gè)[]rxgo.Producer的切片,其中rxgo.Producer的類型為func(ctx context.Context, next chan<- Item)。我們可以在代碼中調(diào)用rxgo.Of(value)生成數(shù)據(jù),rxgo.Error(err)生成錯(cuò)誤,然后發(fā)送到next通道中:
func main() {
observable := rxgo.Create([]rxgo.Producer{func(ctx context.Context, next chan<- rxgo.Item) {
next <- rxgo.Of(1)
next <- rxgo.Of(2)
next <- rxgo.Of(3)
next <- rxgo.Error(errors.New("unknown"))
next <- rxgo.Of(4)
next <- rxgo.Of(5)
}})
ch := observable.Observe()
for item := range ch {
if item.Error() {
fmt.Println("error:", item.E)
} else {
fmt.Println(item.V)
}
}
}
分成2個(gè)rxgo.Producer也是一樣的效果:
observable := rxgo.Create([]rxgo.Producer{func(ctx context.Context, next chan<- rxgo.Item) {
next <- rxgo.Of(1)
next <- rxgo.Of(2)
next <- rxgo.Of(3)
next <- rxgo.Error(errors.New("unknown"))
}, func(ctx context.Context, next chan<- rxgo.Item) {
next <- rxgo.Of(4)
next <- rxgo.Of(5)
}})
到此這篇關(guān)于Golang rxgo庫的具體使用的文章就介紹到這了,更多相關(guān)Golang rxgo庫內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Go?io/fs.FileMode文件系統(tǒng)基本操作和權(quán)限管理深入理解
這篇文章主要為大家介紹了Go?io/fs.FileMode文件系統(tǒng)基本操作和權(quán)限管理深入理解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2024-01-01
如何判斷Golang接口是否實(shí)現(xiàn)的操作
這篇文章主要介紹了如何判斷Golang接口是否實(shí)現(xiàn)的操作,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-12-12
GO語言實(shí)現(xiàn)簡單的目錄復(fù)制功能
這篇文章主要介紹了GO語言實(shí)現(xiàn)簡單的目錄復(fù)制功能,通過新建及復(fù)制內(nèi)容等操作最終實(shí)現(xiàn)復(fù)制目錄的功能效果,具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2014-12-12
go語言實(shí)現(xiàn)FisherYates Shuffle洗牌算法(附帶源碼)
本文主要介紹了go語言實(shí)現(xiàn)FisherYates Shuffle洗牌算法(附帶源碼),分別介紹了三種實(shí)現(xiàn)版本,并詳細(xì)解釋了每種版本的實(shí)現(xiàn)邏輯和使用場景,文中通過示例代碼介紹的非常詳細(xì),需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2026-04-04

