title: Select on a go send and receive channel at the same time
body: <p>Suppose I have a buffered send and unbuffered receive channel:</p>
  
  <pre><code>s := make(chan&lt;- int, 5)
  r := make(&lt;-chan int)
  </code></pre>
  
  <p>Is it possible to <code>select</code> on them both, so that <code>r</code> will be selected if it has anything to read, and <code>s</code> will be selected if it is not full? Something equivalent to this, but not using 100% CPU:</p>
  
  <pre><code>for {
      if len(s) &lt; cap(s) {
          // Send something
      }
      if len(r) &gt; 0 {
          // Receive something
      }
  }
  </code></pre>
  
  <p>Note that I want to decide what to send at the time that I send it, not earlier.</p>
  
  <h3>Edit</h3>
  
  <p>This question is basically equivalent to "Can I block until a channel is ready-to-send, <em>without</em> sending anything?"</p>