Tệp nguồn cho kênh là (từ gốc mã nguồn đi của bạn) trong /src/pkg/runtime/chan.go.
hchan
là cấu trúc dữ liệu trung tâm cho kênh, với việc gửi và nhận danh sách được liên kết (giữ con trỏ đến goroutine và phần tử dữ liệu) và cờ closed
. Có một cấu trúc nhúng Lock
được định nghĩa trong runtime2.go và có vai trò như một mutex (futex) hoặc semaphore tùy thuộc vào hệ điều hành. Việc triển khai khóa nằm trong lock_futex.go (Linux/Dragonfly/Some BSD) hoặc lock_sema.go (Windows/OSX/Plan9/Some BSD), dựa trên các thẻ xây dựng.
Hoạt động kênh đều được triển khai trong tệp chan.go này, vì vậy bạn có thể xem makechan, gửi và nhận các thao tác cũng như cấu trúc được chọn, đóng, len và tạo nắp.
Để có giải thích sâu sắc về hoạt động bên trong của kênh, bạn phải đọc Go channels on steroids bởi chính Dmitry Vyukov (Đi lõi dev, goroutines, lên lịch và các kênh khác).