RxGo是 Go语言的Reactive扩展。
安装
go get -u github.com/jochasiga/rxgo用法
watcher := observer.Observer{ // Register a hadler fuctio for every ext available item. NextHadler: fuc(item iterface{}) { fmt.Pritf("Processig: %v\", item) }, // Register a hadler for ay emitted error. ErrHadler: fuc(err error) { fmt.Pritf("Ecoutered error: %v\", err) }, // Register a hadler whe a stream is completed. DoeHadler: fuc() { fmt.Pritl("Doe!") },}it, _ := iterable.New([]iterface{}{1, 2, 3, 4, errors.New("bag"), 5})source := observable.From(it)sub := source.Subscribe(watcher)// wait for the asyc operatio<-sub以上将:
将切片中每个数字的格式字符串prit为4。
prit错误“bag”
重要的是要记住,只有一个OError或ODoe可以在stream中调用。如果stream中有错误,处理停止,ODoe将永远不会被调用,反之亦然。
概念是将所有“sideeffects”分组到这些处理程序中,让一个Observer或任何EvetHadler处理它们。
package maiimport ( "fmt" "time" "github.com/jochasiga/rx" "github.com/jochasiga/rx/hadlers")fuc mai() { score := 9 oNext := hadlers.NextFuc(fuc(item iterface{}) { if um, ok := item.(it); ok { score += um } }) oDoe := hadlers.DoeFuc(fuc() { score *= 2 }) watcher := observer.New(oNext, oDoe) // Create a `Observable` from a sigle item ad subscribe to the observer. sub := observable.Just(1).Subscribe(watcher) <-sub fmt.Pritl(score) // 20}
评论