package main
import (
"fmt"
)
type Person struct {
ID string `json: "id"`
Name string `json: "name"`
}
type PersonHandler interface {
bath(origs <-chan Person) <-chan Person
handle(orig Person)
fetchPerson(origs chan<- Person)
savePerson(dest <-chan Person) <-chan bool
}
type PersonHanlerImpl struct{}
func getPersonHandler() PersonHandler {
return PersonHanlerImpl{}
}
func (handler PersonHanlerImpl) bath(origs <-chan Person) <-chan Person {
dests := make(chan Person, 100)
go func() {
for {
orig, ok := <-origs
if !ok {
close(dests)
break
}
handler.handle(orig)
dests <- orig
}
}()
return dests
}
func (handler PersonHanlerImpl) handle(orig Person) {
fmt.Printf("name: %s\n", orig.Name)
}
func (handler PersonHanlerImpl) fetchPerson(origs chan<- Person) {
p := Person{ID: "003", Name: "user03"}
origs <- p
}
func (handler PersonHanlerImpl) savePerson(orig <-chan Person) <-chan bool {
rc := make(chan bool)
go func() {
o, ok := <-orig
if !ok {
fmt.Println("channel has been closed")
}
handler.handle(o)
rc <- true
}()
return rc
}
func main() {
// test batch
personHandlerImple := PersonHanlerImpl{}
batchChan := make(chan Person, 2)
batchChan <- Person{ID: "001", Name: "user01"}
batchChan <- Person{ID: "002", Name: "user02"}
batchResult := personHandlerImple.bath(batchChan)
<-batchResult
// test fetch
fetchChan := make(chan Person, 1)
personHandlerImple.fetchPerson(fetchChan)
fetchResult := <-fetchChan
fmt.Printf("got person with id=%s, name=%s\n", fetchResult.ID, fetchResult.Name)
// test save
saveChan := make(chan Person, 1)
saveChan <- Person{ID: "004", Name: "user04"}
saveResult := personHandlerImple.savePerson(saveChan)
saveValue := <-saveResult
fmt.Printf("save result: %v\n", saveValue)
}
Go channel 使用示例代码
最新推荐文章于 2020-11-11 18:53:01 发布
本文介绍了一个使用Go语言实现的并发处理案例,通过定义结构体和接口来管理数据,并利用通道和协程实现了批量处理、获取及保存数据的功能。
部署运行你感兴趣的模型镜像
您可能感兴趣的与本文相关的镜像
ACE-Step
音乐合成
ACE-Step
ACE-Step是由中国团队阶跃星辰(StepFun)与ACE Studio联手打造的开源音乐生成模型。 它拥有3.5B参数量,支持快速高质量生成、强可控性和易于拓展的特点。 最厉害的是,它可以生成多种语言的歌曲,包括但不限于中文、英文、日文等19种语言
3963

被折叠的 条评论
为什么被折叠?



