服务计算Homework06
- 项目地址
- 使用说明
- 下载项目后直接输入命令
go run "hw06\main.go"
即可运行hw06/main.go
展示filter对应功能hw06/rxgo-master
中的filter.go
为实现filter对应功能的源码hw06/rxgo-master
中的filter_test.go
为filter对应功能的gotest测试- 测试命令为
go test -v "hw06\rxgo-master\filter_test.go" "hw06\rxgo-master\filter.go" "hw06\rxgo-master\generators.go" "hw06\rxgo-master\transforms.go" "hw06\rxgo-master\utility.go" "hw06\rxgo-master\rxgo.go"
- apidoc为对应自动生成的API,下载好相关资源(apidoc文件夹中的所有文件)后打开
apidoc/index.html
即可看到生成的API
课程任务
- 阅读 ReactiveX 文档。请在pmlpml/RxGo基础上,
- 修改、改进它的实现
- 或添加一组新的操作,如filtering
- 该库的基本组成:
rxgo.go
给出了基础类型、抽象定义、框架实现、Debug工具等generators.go
给出了 sourceOperater 的通用实现和具体函数实现transforms.go
给出了 transOperater 的通用实现和具体函数实现
RxGo的简单使用
在pmlpml/RxGo下载对应包并导入本地goworks路径
- 调用
generators.go
中定义的Just方法:使用,
分行打印hello
、world
、!
package main
import (
"fmt"
RxGo "hw06/rxgo-master"
)
func main() {
RxGo.Just("Hello", "World", "!").Subscribe(func(x string) {
fmt.Println(x)
})
}
// output:
// Hello
// World
// !
- 函数链调用:调用
generators.go
中的start方法,通过source.operator1().operator2().operator3().subscribe(observer)
方式进行链调用- 调用
fibonacci(10)
实现求出10以内的斐波那契数列 - 调用
map
将结果×2 - 调用
Subscribe
输出
- 调用
package main
import (
"fmt"
RxGo "hw06/rxgo-master"
)
func fibonacci(max int) func() (int, bool) {
a, b := 0, 1
return func() (r int, end bool) {
r = a
a, b = b, a + b
if r > max {
end = true
}
return
}
}
func main() {
RxGo.Start(fibonacci(10)).Map(func(x int) int {
return 2 * x
}).Subscribe(func(x int) {
fmt.Print(x)
})
}
// output
// 022461016
- 连接的observables,与管道类似,不同的是,它在订阅时不会开始发送项目,而只有在调用其connect()方法时才会开始发送
package main
import (
"fmt"
RxGo "hw06/rxgo-master"
)
func main() {
//define pipeline
source := RxGo.Just