我是新手,我发现自己写了几个for
循环,看起来像这样:
for element, err := producer.Produce(); err == nil; element, err = producer.Produce() {
process(element)
}
其中producer.Produce()
是reader.ReadString('\n')
或fmt.Fscan(Reader, &token)
之类的函数。我更愿意写
for element := range elements {
process(element)
}
但是现在,我会很高兴知道是否有更简洁的方法来迭代这些函数的输出。特别是,有一种很好的方法可以摆脱init语句和for语句的post语句中的这种烦人的重复吗?
答案 0 :(得分:2)
我认为没有什么比你想要的更干净了。写它的惯用方法是:
for {
element, err := producer.Produce()
if err != nil {
break
}
process(element)
}
答案 1 :(得分:0)
以下是从这种方法创建频道的方法:
elements := make(chan elementType)
val send func()
send = func() {
if element, err := producer.Produce(); err == nil {
elements <- element
go send()
} else {
close(elements)
}
}
go send()
for element := range elements {
process(element)
}