From a6aec5bed0302e2477a9bfada26b4fefea1d89ca Mon Sep 17 00:00:00 2001 From: glight2000 <173959153@qq.com> Date: Wed, 30 Dec 2015 17:31:42 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E6=88=9014.4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- eBook/14.4.md | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/eBook/14.4.md b/eBook/14.4.md index 17b309a..392b290 100644 --- a/eBook/14.4.md +++ b/eBook/14.4.md @@ -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 .. + // ... + } + } +} +``` ## 链接