Die Quelldatei für Kanäle ist (von Ihrem Quellcode root) in /src/pkg/runtime/chan.go.
hchan
ist die zentrale Datenstruktur für einen Kanal mit verknüpften Listen zum Senden und Empfangen (mit einem Zeiger auf ihre Goroutine und das Datenelement) und einem closed
Flag. Es gibt eine Lock
eingebettete Struktur, die in runtime2.go definiert ist und je nach Betriebssystem als Mutex (Futex) oder Semaphor dient. Die Locking-Implementierung ist in lock_futex.go (Linux/Dragonfly/Some BSD) oder lock_sema.go (Windows/OSX/Plan9/Some BSD), basierend auf den Build-Tags.
In dieser chan.go-Datei sind alle Kanaloperationen implementiert, sodass Sie die Operationen makechan, send und receive sowie die Konstrukt-, Schließen-, Len- und Cap-Konstrukte auswählen können.
Für eine eingehende Erklärung über die inneren Funktionen von Kanälen, müssen Sie lesen Go channels on steroids von Dmitry Vyukov selbst (Go-Core-Entwickler, goroutines, Scheduler und Kanäle unter anderem).