# Introduction One of the most attractive features of the Go language is its native support for concurrent programming. It has strong support for parallelism, concurrent programming, and network communication, allowing for more efficient use of multi-core processors. Unlike other languages that achieve concurrency through shared memory, Go achieves concurrency by using channels for communication between different goroutines. Goroutines are the units of concurrency in Go and can be thought of as lightweight threads. They consume fewer resources when switching between them compared to traditional threads. Channels and goroutines together constitute the concurrency primitives in Go. In this section, we will learn about channels, this new data structure. **Knowledge Points:** - Types of channels - Creating channels - Operating on channels - Channel blocking - Unidirectional channels
Click the virtual machine below to start practicing