利用channel在goroutins之间控制同步和传递数据
2016-09-17 08:17
465 查看
利用channel在goroutins之间控制同步和传递数据
发表回复在java等代码中,我们查询数据库的操作:
1 2 3 4 5 6 | sql = "select * from ...."; result = db.query(sql) for(item in result) { ..... } |
db的封装:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | package main var database *db type db struct { req chan string res chan interface{} } func init() { database = NewDB() go database.Run() } //处理查询请求,请req channel中的SQL取到,执行查询后结果放在res channel中 func (d *db) Run() { var s string for { s = <-d.req d.res <- d.query(s) } } func (d *db) query(sql string) interface{}{ //... } func NewDB() *db { out := new(db) out.req = make(chan string) out.res = make(chan bool) return out } |
1 2 3 4 | sql := "select * from ..."; if database.req <- sql; res<-database.res { //use res } |
1、实现了同步获取结果,和直接一个线程里调用方法效果相似。
2、调用和被调用在独立的协程里
3、查询列表是一个先进先出的队列
相关文章推荐
- 利用channel在goroutins之间控制同步和传递数据
- ndk开发中利用java与c之间互相传递数据
- 利用Bundle实现Activity之间的数据传递。
- 【MVC架构】——如何利用Json在View和Controller之间传递数据
- cocos2dx EventListenerCustom类控制事件的分发 处理不同层之间的事件传递以及自定义用户数据
- android之在activity中控制另一个activity的UI更新_如何在activity之间传递handler&利用broadcast广播机制
- .net利用SQLBulkCopy进行数据库之间的大批量数据传递
- javascript控制表单之间的数据传递方法
- 利用 Parcelable 进行 Activity 之间的复杂数据传递
- [转载]pda 和pc 之间的文件操作(利用Microsoft ActiveSync同步文件数据)
- 利用Rsync在windows和linux之间同步数据
- 利用Intent在不同的activity之间传递数据
- 线程之间传递数据对象(利用线程槽实现)
- Activity之间利用Bundle传递数据的大小
- 利用粘贴板技术在应用之间传递数据。
- BroadcastReceiver广播接收者(三)——利用广播在应用程序之间传递数据
- 利用协议在view controller之间传递数据
- [转载]pda 和pc 之间的文件操作(利用Microsoft ActiveSync同步文件数据)
- 利用Serializable接口在Activity之间传递数据
- android studio for android learning (十一) 利用bundle在activity之间进行数据传递示例