Kanały Golang

Kanały Golang
Kanał w Go odnosi się do techniki, w której Goroutines mogą się komunikować. Mówiąc najprościej, kanał to rura, za pomocą której można połączyć współbieżne goroutines, umożliwiając komunikację. Komunikacja między Goroutinami jest dwukierunkowa. Zatem umożliwienie Goroutines wysyłanie i odbieranie wartości przez ten sam kanał.

Golang Utwórz kanał

Zanim będziemy mogli użyć kanału w Go, musimy go utworzyć. Aby utworzyć kanał w Go, możemy użyć funkcji Make, aby utworzyć nowy kanał.

Składnia jest jak pokazana:

Make (Chan Val-Type)

Należy pamiętać, że kanał jest wrażliwy na typ danych. Oznacza to, że nie możemy wysłać wartości INT przez kanał ciągu.

Poniższy przykład tworzy kanał, który może obsługiwać tylko typy ciągów:

CH: = Make (CHAN String)

Po ogłoszeniu kanału możemy wysyłać i odbierać wartości.

Wysyłanie i odbieranie wartości

Możemy wysyłać i odbierać wartości za pomocą kanału <- operator. An example code is as shown below:

Pakiet Main
importować „fmt”
funcMain ()
CH: = Make (Chanstring)
// Wyślij do kanału
gofunc ()
Ch<- "Hello"
()
// Otrzymuj
MSG: = <-ch
fmt.Println (MSG)

W poprzednim przykładzie tworzymy podstawową goroutinę, aby wysłać dane do kanału „CH”. Następnie otrzymujemy dane z kanału i wydrukujemy je.

Wysyłanie struktury przez kanał

Możemy również wysłać dane struktury za pomocą kanału, pod warunkiem, że utworzymy kanał o właściwym typie.

Rozważ następujący przykład kodu:

Pakiet Main
importować „fmt”
Wpisz Struktura użytkownika
FirstName, LastNamestring

funcMain ()
user1: = User „Jane”, „Doe”
CH: = MAK (użytkownik Chan)
gofunc ()
Ch<- user1
()
First_name: = (<-ch).FirstName
fmt.Println (nazwa pierwszej)

Jeśli uruchomimy poprzedni kod, powinien wydrukować imię otrzymane przez struktura wysłane przez kanał.

Kanały jednokierunkowe

Jak wspomniano, kanały Go są domyślnie dwukierunkowe. Możemy jednak zdefiniować kanał, aby mógł wysyłać lub odbierać wartości, ale nie jedno. Jest to znane jako kanał jednokierunkowy.

Składnia jest jak pokazana:

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

Zwróć uwagę na pozycję operatora kanału w poprzedniej składni.

Poniższy przykład tworzy kanał tylko wysyłania:

Pakiet Main
importować „fmt”
Wpisz Struktura użytkownika
FirstName, LastNamestring

funcMain ()
CH: = Make (Chan<- string)
gofunc ()
Ch<- "Hi"
()
MSG: = <- ch

Zwróć uwagę, że poprzedni kanał jest ustawiony na wysyłanie tylko. Staramy się jednak odbierać przez kanał, a kompilator zwraca błąd, jak pokazano:

Nieprawidłowa operacja: <-ch (receive z Wysyłanie tylko typu chan<- string)

Kanały zamykające

Możemy zamknąć kanał po wysłaniu wymaganych wartości. W tym celu używamy funkcji zamykania. Bierze nazwę kanału. Następnie zamyka kanał i zwraca wartość logiczną, której można użyć, aby sprawdzić, czy kanał jest zamknięty.

Przykład jest pokazany poniżej:

Pakiet Main
importować „fmt”
Wpisz Struktura użytkownika
FirstName, LastNamestring

funcMain ()
CH: = Make (Chanstring)
gofunc ()
Ch<- "Hi"
()
_, ok: = <-ch
Zamknij (CH)
Jeśli !OK
fmt.Println („zamknięty… [OK]”)

fmt.Println („blisko… [upadek!] ”)

Poprzedni przykład zamyka kanał za pomocą metody Close (). Następnie używamy wartości logicznej zwróconej z funkcji, aby sprawdzić, czy kanał jest zamknięty.

Wniosek

Ten przewodnik przechodzi przez sposób pracy z kanałami w języku programowania Go. Omówiono proces tworzenia kanału, wysyłania i odbierania wartości, wysyłania danych struktur. Mamy nadzieję, że ten artykuł jest pomocny. Sprawdź inne artykuły w Linux, aby uzyskać więcej wskazówek i informacji.