mirror of
https://github.com/unknwon/the-way-to-go_ZH_CN.git
synced 2025-08-19 03:50:11 +08:00
完成14.4
This commit is contained in:
@@ -137,7 +137,38 @@ Received on channel 1: 94348
|
|||||||
|
|
||||||
习惯用法:后台服务模式
|
习惯用法:后台服务模式
|
||||||
|
|
||||||
|
服务通常是是用后台协程中的无限循环实现的,在循环中使用`select`获取并处理通道中的数据:
|
||||||
|
```go
|
||||||
|
// Backend goroutine.
|
||||||
|
func backend() {
|
||||||
|
for {
|
||||||
|
select {
|
||||||
|
case cmd := <-ch1:
|
||||||
|
// Handle ...
|
||||||
|
case cmd := <-ch2:
|
||||||
|
...
|
||||||
|
case cmd := <-chStop:
|
||||||
|
// stop server
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
在程序的其他地方给通道`ch1`,`ch2`发送数据,比如:通道`stop`用来清理结束服务程序。
|
||||||
|
|
||||||
|
另一种方式(但是不太灵活)就是(客户端)在`chRequest`上提交请求,后台协程循环这个通道,使用`switch`根据请求的行为来分别处理:
|
||||||
|
```go
|
||||||
|
func backent() {
|
||||||
|
for req := range chRequest {
|
||||||
|
switch req.Subjext() {
|
||||||
|
case A1: // Handle case ...
|
||||||
|
case A2: // Handle case ...
|
||||||
|
default:
|
||||||
|
// Handle illegal request ..
|
||||||
|
// ...
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
## 链接
|
## 链接
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user