| 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: Concurrency in Go by Katherine Cox-Buday