I have a function in Go that returns two values. I want to run this as a goroutine, but I can't figure out the syntax for creating a channel that receives two values. Could someone point me in the right direction?
2条回答 默认 最新
- doubu1950 2013-07-24 05:35关注
Define a custom type with fields for both values, then create a
chan
of that type.EDIT: I've also added an example (right at the bottom) that uses multiple channels rather than a custom type. I'm not sure which is more idiomatic.
For example:
type Result struct { Field1 string Field2 int }
then
ch := make(chan Result)
Example of using a channel of a custom type (Playground):
package main import ( "fmt" "strings" ) type Result struct { allCaps string length int } func capsAndLen(words []string, c chan Result) { defer close(c) for _, word := range words { res := new(Result) res.allCaps = strings.ToUpper(word) res.length = len(word) c <- *res } } func main() { words := []string{"lorem", "ipsum", "dolor", "sit", "amet"} c := make(chan Result) go capsAndLen(words, c) for res := range c { fmt.Println(res.allCaps, ",", res.length) } }
Produces:
LOREM , 5
IPSUM , 5
DOLOR , 5
SIT , 3
AMET , 4EDIT: Example using multiple channels instead of a custom type to produce the same output (Playground):
package main import ( "fmt" "strings" ) func capsAndLen(words []string, cs chan string, ci chan int) { defer close(cs) defer close(ci) for _, word := range words { cs <- strings.ToUpper(word) ci <- len(word) } } func main() { words := []string{"lorem", "ipsum", "dolor", "sit", "amet"} cs := make(chan string) ci := make(chan int) go capsAndLen(words, cs, ci) for allCaps := range cs { length := <-ci fmt.Println(allCaps, ",", length) } }
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥15 R语言Rstudio突然无法启动
- ¥15 关于#matlab#的问题:提取2个图像的变量作为另外一个图像像元的移动量,计算新的位置创建新的图像并提取第二个图像的变量到新的图像
- ¥15 改算法,照着压缩包里边,参考其他代码封装的格式 写到main函数里
- ¥15 用windows做服务的同志有吗
- ¥60 求一个简单的网页(标签-安全|关键词-上传)
- ¥35 lstm时间序列共享单车预测,loss值优化,参数优化算法
- ¥15 Python中的request,如何使用ssr节点,通过代理requests网页。本人在泰国,需要用大陆ip才能玩网页游戏,合法合规。
- ¥100 为什么这个恒流源电路不能恒流?
- ¥15 有偿求跨组件数据流路径图
- ¥15 写一个方法checkPerson,入参实体类Person,出参布尔值