mirror of
https://github.com/unknwon/the-way-to-go_ZH_CN.git
synced 2025-08-12 07:23:28 +08:00
fix: coding style and file format for chapter 11, 12, 13, 14 and 15.
This commit is contained in:
@@ -1,58 +1,59 @@
|
||||
// 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.
|
||||
package main
|
||||
|
||||
import "fmt"
|
||||
|
||||
type Request struct {
|
||||
a, b int
|
||||
replyc chan int // reply channel inside the Request
|
||||
}
|
||||
|
||||
type binOp func(a, b int) int
|
||||
|
||||
func run(op binOp, req *Request) {
|
||||
req.replyc <- op(req.a, req.b)
|
||||
}
|
||||
|
||||
func (r *Request) String() string {
|
||||
return fmt.Sprintf("%d+%d=%d", r.a, r.b, <-r.replyc)
|
||||
}
|
||||
|
||||
func server(op binOp, service chan *Request, quit chan bool) {
|
||||
for {
|
||||
select {
|
||||
case req := <-service:
|
||||
go run(op, req)
|
||||
case <-quit:
|
||||
return // stop infinite loop
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func startServer(op binOp) (service chan *Request, quit chan bool) {
|
||||
service = make(chan *Request)
|
||||
quit = make(chan bool)
|
||||
go server(op, service, quit)
|
||||
return service, quit
|
||||
}
|
||||
|
||||
func main() {
|
||||
adder, quit := startServer(func(a, b int) int { return a + b })
|
||||
// make requests:
|
||||
req1 := &Request{3, 4, make(chan int)}
|
||||
req2 := &Request{150, 250, make(chan int)}
|
||||
// send requests on the service channel
|
||||
adder <- req1
|
||||
adder <- req2
|
||||
// ask for the results: ( method String() is called )
|
||||
fmt.Println(req1, req2)
|
||||
// shutdown server:
|
||||
quit <- true
|
||||
fmt.Print("done")
|
||||
}
|
||||
/* output:
|
||||
3+4=7 150+250=400
|
||||
done
|
||||
*/
|
||||
// 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.
|
||||
package main
|
||||
|
||||
import "fmt"
|
||||
|
||||
type Request struct {
|
||||
a, b int
|
||||
replyc chan int // reply channel inside the Request
|
||||
}
|
||||
|
||||
type binOp func(a, b int) int
|
||||
|
||||
func run(op binOp, req *Request) {
|
||||
req.replyc <- op(req.a, req.b)
|
||||
}
|
||||
|
||||
func (r *Request) String() string {
|
||||
return fmt.Sprintf("%d+%d=%d", r.a, r.b, <-r.replyc)
|
||||
}
|
||||
|
||||
func server(op binOp, service chan *Request, quit chan bool) {
|
||||
for {
|
||||
select {
|
||||
case req := <-service:
|
||||
go run(op, req)
|
||||
case <-quit:
|
||||
return // stop infinite loop
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func startServer(op binOp) (service chan *Request, quit chan bool) {
|
||||
service = make(chan *Request)
|
||||
quit = make(chan bool)
|
||||
go server(op, service, quit)
|
||||
return service, quit
|
||||
}
|
||||
|
||||
func main() {
|
||||
adder, quit := startServer(func(a, b int) int { return a + b })
|
||||
// make requests:
|
||||
req1 := &Request{3, 4, make(chan int)}
|
||||
req2 := &Request{150, 250, make(chan int)}
|
||||
// send requests on the service channel
|
||||
adder <- req1
|
||||
adder <- req2
|
||||
// ask for the results: ( method String() is called )
|
||||
fmt.Println(req1, req2)
|
||||
// shutdown server:
|
||||
quit <- true
|
||||
fmt.Print("done")
|
||||
}
|
||||
|
||||
/* output:
|
||||
3+4=7 150+250=400
|
||||
done
|
||||
*/
|
||||
|
Reference in New Issue
Block a user