您的位置:首页 > 教育 > 培训 > go多路复用功能

go多路复用功能

2025/5/15 23:21:50 来源:https://blog.csdn.net/qq_43022682/article/details/139926219  浏览:    关键词:go多路复用功能

大家在工作中使用go语言都是因为go语言中提供方便又简介的协成吧,只需一个go关键字就可以开启一个协成,今天为大家推荐一种go实现的多路复用代码,大家可以参考一下呀可以下方评论留言呦

package test_7import ("fmt""testing"
)type binOp func(a, b int) intfunc TestGoAll(t *testing.T) {adder := startServer(func(a, b int) int { return a + b })const N = 100var reqs [N]Requestfor i := 0; i < N; i++ {req := &reqs[i]req.a = ireq.b = i + Nreq.replay = make(chan int)adder <- req}for i := N - 1; i >= 0; i-- {if <-reqs[i].replay != N+2*i {fmt.Println("failed at", i)} else {fmt.Println("Request", i, "is ok!")}}fmt.Println("done")
}type Request struct {a, b   intreplay chan int
}func run(op binOp, req *Request) {req.replay <- op(req.a, req.b)
}func server(op binOp, service chan *Request) {for {rep := <-servicego run(op, rep)}
}
func startServer(op binOp) chan *Request {reqChan := make(chan *Request)go server(op, reqChan)return reqChan
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com