Golang -Kanäle

Golang -Kanäle
Ein Kanal in Go bezieht sich auf eine Technik, über die Goroutinen kommunizieren können. Einfach ausgedrückt, ein Kanal ist ein Rohr, durch das Sie gleichzeitige Goroutinen anschließen können, um Kommunikation zu ermöglichen. Die Kommunikation zwischen Goroutines ist bidirektional. So erlauben Goroutines, Wert über denselben Kanal zu senden und zu empfangen.

Golang erstellen Kanal

Bevor wir einen Kanal in Go verwenden können, müssen wir einen erstellen. Um einen Kanal in Go zu erstellen, können wir mit der Funktion Make -Funktion einen neuen Kanal erstellen.

Die Syntax ist wie gezeigt:

machen (Chan Val-Type)

Denken Sie daran, dass ein Kanal für den Datentyp sensibel ist. Dies bedeutet.

Das folgende Beispiel erstellt einen Kanal, der nur String -Typen unterstützen kann:

CH: = make (chan String)

Sobald wir einen Kanal deklariert haben, können wir Werte senden und empfangen.

Werte senden und empfangen

Wir können Werte mit dem Kanal senden und empfangen <- operator. An example code is as shown below:

Paket Main
importieren "fmt"
funcmain ()
CH: = make (chantring)
// an den Kanal senden
gofunc ()
CH<- "Hello"
())
// Erholung
MSG: = <-ch
fmt.Println (msg)

Im vorherigen Beispiel erstellen wir eine grundlegende Goroutine, mit der die Daten an den Kanal "CH" gesendet werden können. Wir erhalten dann die Daten aus dem Kanal und drucken sie aus.

Struktur per Kanal senden

Wir können Strukturdaten auch über einen Kanal senden, vorausgesetzt, wir erstellen den Kanal mit dem richtigen Typ.

Betrachten Sie das folgende Code -Beispiel:

Paket Main
importieren "fmt"
Geben Sie die Benutzerstruktur ein
FirstName, Lastnamestring

funcmain ()
Benutzer1: = Benutzer "Jane", "doe"
CH: = make (Chan -Benutzer)
gofunc ()
CH<- user1
())
First_Name: = ((<-ch).FirstName
fmt.Println (first_name)

Wenn wir den vorherigen Code ausführen, sollte er den Vornamen drucken, wie er von der Struktur über den Kanal gesendet wird.

Unidirektionale Kanäle

Wie bereits erwähnt, sind Go -Kanäle standardmäßig bidirektional. Wir können jedoch einen Kanal definieren, damit er Werte entweder senden oder empfangen kann, aber nicht beides. Dies ist als unidirektionaler Kanal bekannt.

Die Syntax ist wie gezeigt:

CH: = make (chan<- data_type) // send-only channel
CH: = make (<-chan data_type) // receive only channel

Beachten Sie die Position des Kanaloperators in der vorherigen Syntax.

Das folgende Beispiel erstellt nur einen Send-Kanal:

Paket Main
importieren "fmt"
Geben Sie die Benutzerstruktur ein
FirstName, Lastnamestring

funcmain ()
CH: = make (chan<- string)
gofunc ()
CH<- "Hi"
())
MSG: = <- ch

Beachten Sie, dass der vorherige Kanal auf nur Senden eingestellt ist. Wir versuchen jedoch, über den Kanal zu empfangen, und der Compiler gibt einen Fehler zurück, wie gezeigt:

ungültige Operation: <-ch (receive aus Nur-Send-Typ Chan<- string)

Kanäle schließen

Wir können einen Kanal schließen, nachdem die erforderlichen Werte gesendet wurden. Dafür verwenden wir die enge Funktion. Es nimmt den Namen des Kanals auf. Anschließend schließt es den Kanal und gibt einen booleschen Wert zurück, mit dem Sie überprüfen können, ob der Kanal geschlossen ist.

Ein Beispiel ist unten gezeigt:

Paket Main
importieren "fmt"
Geben Sie die Benutzerstruktur ein
FirstName, Lastnamestring

funcmain ()
CH: = make (chantring)
gofunc ()
CH<- "Hi"
())
_, ok: = <-ch
schließen (ch)
Wenn !OK
fmt.Println ("geschlossen ... [OK]")

fmt.Println ("schließen ... [fehlschlagen!] ")

Das vorherige Beispiel schließt den Kanal mit der Methode close (). Wir verwenden dann den von der Funktion zurückgegebenen Booleschen Wert, um zu überprüfen, ob der Kanal geschlossen ist.

Abschluss

Dieser Leitfaden führt Sie durch die Arbeit mit Kanälen in der Go -Programmiersprache. Der Prozess des Erstellens eines Kanals, des Sendens und Empfangens von Werten, zum Senden von Strukturmaten über einen Kanal, die Erklärung der unidirektionalen Kanäle und das Schließen der Kanäle wurden diskutiert. Wir hoffen, Sie haben diesen Artikel hilfreich gefunden. Weitere Tipps und Informationen finden Sie in den anderen Linux -Hinweisartikeln.