Canali Golang

Canali Golang
Un canale in go si riferisce a una tecnica attraverso la quale le goroutine possono comunicare. In poche parole, un canale è un tubo attraverso il quale è possibile collegare goroutine simultanee, consentendo la comunicazione. La comunicazione tra goroutine è bidirezionale. Pertanto, consentendo alle goroutine di inviare e ricevere valore tramite lo stesso canale.

Golang crea canale

Prima di poter usare un canale in GO, dobbiamo crearne uno. Per creare un canale in GO, possiamo utilizzare la funzione Make per creare un nuovo canale.

La sintassi è come mostrata:

Make (Chan Val-Type)

Tieni presente che un canale è sensibile al tipo di dati. Ciò significa che non possiamo inviare un valore int tramite un canale di stringa.

Il seguente esempio crea un canale che può supportare solo i tipi di stringhe:

ch: = make (chan string)

Una volta dichiarato un canale, possiamo inviare e ricevere valori.

Invio e ricezione di valori

Possiamo inviare e ricevere valori utilizzando il canale <- operator. An example code is as shown below:

Pacchetto principale
Importa "FMT"
funcmain ()
Ch: = make (Chanstring)
// Invia al canale
gofunc ()
cap<- "Hello"
()
// riceve
msg: = <-ch
fmt.Println (msg)

Nell'esempio precedente, creiamo una goroutine di base per inviare i dati al canale "CH". Riceviamo quindi i dati dal canale e li stampiamo.

Invio di struct tramite canale

Possiamo anche inviare dati struct tramite un canale, a condizione che creiamo il canale con il tipo corretto.

Considera il seguente esempio di codice:

Pacchetto principale
Importa "FMT"
Digita utente struct
Primo nome, lastamestring

funcmain ()
user1: = user "jane", "doe"
CH: = make (utente Chan)
gofunc ()
cap<- user1
()
First_name: = (<-ch).FirstName
fmt.Println (first_name)

Se eseguiamo il codice precedente, dovrebbe stampare il nome come ricevuto dalla struttura inviata tramite il canale.

Canali unidirezionali

Come accennato, i canali GO sono bidirezionali per impostazione predefinita. Tuttavia, possiamo definire un canale in modo che possa inviare o ricevere valori ma non entrambi. Questo è noto come un canale unidirezionale.

La sintassi è come mostrata:

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

Notare la posizione dell'operatore del canale nella sintassi precedente.

L'esempio seguente crea un canale solo invio:

Pacchetto principale
Importa "FMT"
Digita utente struct
Primo nome, lastamestring

funcmain ()
ch: = make (Chan<- string)
gofunc ()
cap<- "Hi"
()
msg: = <- ch

Nota Il canale precedente è impostato su SEND SOLO. Tuttavia, cerchiamo di ricevere attraverso il canale e il compilatore restituisce un errore come mostrato:

Operazione non valida: <-ch (receive da Tipo di solo invio Chan<- string)

Canali di chiusura

Possiamo chiudere un canale dopo l'invio dei valori richiesti. Per questo, utilizziamo la funzione ravvicinata. Prende il nome del canale. Quindi chiude il canale e restituisce un valore booleano che è possibile utilizzare per verificare se il canale è chiuso.

Un esempio è mostrato di seguito:

Pacchetto principale
Importa "FMT"
Digita utente struct
Primo nome, lastamestring

funcmain ()
Ch: = make (Chanstring)
gofunc ()
cap<- "Hi"
()
_, ok: = <-ch
Close (Ch)
Se !OK
fmt.Println ("chiuso ... [ok]")

fmt.Println ("Chiudi ... [fallisci!] ")

L'esempio precedente chiude il canale usando il metodo chiuso (). Usiamo quindi il valore booleano restituito dalla funzione per verificare se il canale è chiuso.

Conclusione

Questa guida ti guida attraverso come lavorare con i canali nel linguaggio di programmazione Go. Il processo di creazione di un canale, l'invio e la ricezione di valori, l'invio di dati struct tramite un canale, la spiegazione dei canali unidirezionali e la chiusura dei canali sono stati discussi. Speriamo che tu abbia trovato questo articolo utile. Dai un'occhiata agli altri articoli di suggerimento Linux per ulteriori suggerimenti e informazioni.