| Operation | Channel state | Result |
|---|---|---|
| Read | nil |
Block |
| Open and Not Empty | Value | |
| Open and Empty | Block | |
| Closed | [default value], false | |
| Write Only | Compilation Error | |
| Write | nil |
Block |
| Open and Full | Block | |
| Open and Not Full | Write Value | |
| Closed | panic | |
| Receive Only | Compilation Error | |
close |
nil |
panic |
| Open and Not Empty | Closes Channel; reads succeed until channel is drained, then reads produce default value | |
| Open and Empty | Closes Channel; reads produces default value | |
| Closed | panic | |
| Receive Only | Compilation Error |
Source: Page 76 of Concurrency in Go (by Katherine Cox-Buday)