title: How are Go channels implemented?
body: <p>After (briefly) reviewing the Go language spec, effective Go, and the Go memory model, I'm still a little unclear as to how Go channels work under the hood.</p>
  
  <p>What kind of structure are they? They act kind of like a thread-safe queue /array.</p>
  
  <p>Does their implementation depend on the architecture?</p>