也许我只是没有正确阅读规范,或者我的心态仍然坚持使用旧的同步方法,但是在 Go中发送一种类型作为接收其他类型作为响应的正确方法是什么?
我想出的一种方法是
package main
import "fmt"
type request struct {
out chan string
argument int
}
var input = make(chan *request)
var cache = map[int]string{}
func processor() {
for {
select {
case in := <- input:
if result, exists := cache[in.argument]; exists {
in.out <- result
}
result := fmt.Sprintf("%d", in.argument)
cache[in.argument] = result
in.out <- result
}
}
}
func main() {
go processor()
responseCh := make(chan string)
input <- &request{
responseCh,
1,
}
result := <- responseCh
fmt.Println(result)
}
该缓存对于此示例并不是真正必需的,否则会导致数据竞争。
这是我应该做的吗?
慕莱坞森
相关分类