-
func ReadSource(reader io.Reader) <-chan int { out := make(chan int) go func() { buffer := make([]byte, 8) for { n, err := reader.Read(buffer) if n > 0 { v := int(binary.BigEndian.Uint64(buffer)) out <- v } if err != nil { break } } close(out) }() return out } func WriteSink(writer io.Writer, in <-chan int) { for v := range in { buffer := make([]byte, 8) binary.BigEndian.PutUint64(buffer, uint64(v)) writer.Write(buffer) } } func RandomSource(count int) <-chan int{ out := make(chan int) go func() { for i := 0; i < count; i++ { out <- rand.Int() } close(out) }() return out }
func main() { const filename = "large.in" const n = 100000000 file, err := os.Create(filename) if err != nil { panic(err) } defer file.Close() p := pipeline.RandomSource(n) writer := bufio.NewWriter(file) pipeline.WriteSink(writer, p) writer.Flush() file, err = os.Open(filename) if err != nil { panic(err) } defer file.Close() p = pipeline.ReadSource(bufio.NewReader(file)) count := 0 for v := range p { fmt.Println(v) count++ if count >= 100 { break } } }
查看全部 -
进一步学习
go tool tour
http://docscn.studygolang.com/doc/
期待我的 go 语言实战课
查看全部 -
go 语言三大特色
面向接口- Reader/ Writer 接口的使用
函数式编程
并发编程
查看全部 -
课程回顾
原始数据
查看全部 -
go tool tour确实是我上手go的第一步
A tour of go,交互式教程
查看全部 -
可以不用下载完整的IDE,可以在phpstorm安装go的插件也行
查看全部 -
架构图架构图
查看全部 -
1,csp模型
2,不需要锁、不需要callback
3,并发编程
查看全部 -
Go 语言的特性
查看全部 -
网络的扩展查看全部
-
11145588查看全部
-
并发
查看全部 -
很多goroutine映射到一个线程。多对1的关系。
chan是go里的一等公民。我们可以往chan里放不同类型的数据。也可以从一个声明的chan里取数据。
demo 从8:00开始
查看全部 -
- pipeline:一個library
查看全部 -
- pipeline:一個library
查看全部
举报
0/150
提交
取消