Go OR-Done-Channel Pattern

From NovaOrdis Knowledge Base
Revision as of 22:19, 5 February 2024 by Ovidiu (talk | contribs) (→‎Overview)
Jump to navigation Jump to search

Internal

Overview

Reading from a channel until the channel is closed can be done by ranging over a channel:

for v := range c {
  // do something with the channel value, we exit the loop automatically when the channel is closed
  ...
}

The for/range syntax is simple and intuitive, but it cannot be used anymore if we want to make the loop preemptable by using a channel. In that case we need to replace it with a for/select syntax and case for the state of the done channel.