| // Copyright 2009 The Go Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style |
| // license that can be found in the LICENSE file. |
| type BinOp (a, b int) int; |
| func Run(op *BinOp, request *Request) { |
| result := op(request.a, request.b); |
| request.replyc <- result; |
| func Server(op *BinOp, service *chan *Request, quit *chan bool) { |
| case request := <-service: |
| go Run(op, request); // don't wait for it |
| func StartServer(op *BinOp) (service *chan *Request, quit *chan bool) { |
| service = new(chan *Request); |
| go Server(op, service, quit); |
| adder, quit := StartServer(func(a, b int) int { return a + b }); |
| req.replyc = new(chan int); |
| for i := N-1; i >= 0; i-- { // doesn't matter what order |
| if <-reqs[i].replyc != N + 2*i { |
| print("fail at ", i, "\n"); |