最近的项目用到了 RxGo ,因为之前从没有接触过,特意去学了学,特此记录下。文章很多内容是复制了参考资料或者官方文档。如果涉及侵权,请联系删除,谢谢。
1、RxGo简介
1.1 基础介绍
RxGo是一个基于Go语言的响应式编程库,它提供了一种简单而强大的方式来处理异步事件流和数据流。RxGo的设计灵感来自于ReactiveX,它提供了类似于ReactiveX的操作符和概念,如Observable、Observer、Subject、Scheduler等。
RxGo的目标是提供一种简单而强大的方式来处理异步事件流和数据流,使得开发人员可以更容易地编写高效、可维护和可扩展的代码。RxGo的特点包括:
- 响应式编程:RxGo提供了Observable和Observer两个核心概念,使得开发人员可以更容易地处理异步事件流和数据流。
- 操作符:RxGo提供了类似于ReactiveX的操作符,如map、filter、reduce等,使得开发人员可以更容易地对事件流进行转换、过滤和聚合等操作。
- 调度器:RxGo提供了调度器,使得开发人员可以更容易地控制事件流的执行线程和顺序。
- 可组合性:RxGo的操作符具有可组合性,使得开发人员可以更容易地组合多个操作符来实现复杂的操作。
- 高效性:RxGo的设计和实现都非常高效,可以处理大量的事件流和数据流。
总之,RxGo是一个非常强大和实用的响应式编程库,它可以帮助开发人员更容易地处理异步事件流和数据流,提高代码的可维护性和可扩展性。
1.2 RxGo 数据流程图
RxGo的实现基于管道的概念。管道是由通道连接的一系列阶段,其中每个阶段是运行相同功能的一组goroutine。

- 使用Just操作符创建一个基于固定列表的静态可观测数据。
- 使用Map操作符定义了一个转换函数(把圆形变成方形)。
- 用Filter操作符过滤掉黄色方形。
从上面的例子中可以看出来,最终生成的数据被发送到一个通道中,消费者读取数据进行消费。RxGo中有很多种消费和生成数据的方式,发布结果到通道中只是其中一种方式。
2、快速入门
2.1 安装 RxGo v2
- go get -u github.com/reactivex/rxgo/v2
复制代码 2.2 简单案例
我们先写一个简单的案例,来学习RxGo的简单使用。- package main
- import (
- "fmt"
- "github.com/reactivex/rxgo/v2"
- )
- func main() {
- observable := rxgo.Just(1, 2, 3, 4, 5)()
- ch := observable.Observe()
- for item := range ch {
- fmt.Println(item.V)
- }
- }
复制代码 使用 RxGo 的一般流程如下:
<ul>使用相关的 Operator 创建 Observable,Operator 就是用来创建 Observable 的。
中间各个阶段可以使用过滤操作筛选出我们想要的数据,使用转换操作对数据进行转换;
调用 Observable 的Observe()方法,该方法返回一个 |