Golang -kanaler

Golang -kanaler
En kanal i Go refererer til en teknikk som goroutines kan kommunisere. Enkelt sagt, en kanal er et rør som du kan koble sammen samtidig goroutines, noe som gir mulighet for kommunikasjon. Kommunikasjon mellom goroutines er toveis. Dermed tillater goroutines å sende og motta verdi gjennom samme kanal.

Golang Create Channel

Før vi kan bruke en kanal i Go, må vi lage en. For å lage en kanal i Go, kan vi bruke Make -funksjonen til å lage en ny kanal.

Syntaksen er som vist:

Make (Chan Val-type)

Husk at en kanal er følsom for datatypen. Dette betyr at vi ikke kan sende en int -verdi gjennom en strengkanal.

Følgende eksempel oppretter en kanal som bare kan støtte strengtyper:

CH: = Make (Chan String)

Når vi har erklært en kanal, kan vi sende og motta verdier.

Sende og mottak av verdier

Vi kan sende og motta verdier ved hjelp av kanalen <- operator. An example code is as shown below:

pakkehoved
Importer "FMT"
FUNCMAIN ()
CH: = Make (ChanString)
// Send til kanal
gofunc ()
Ch<- "Hello"
()
// motta
msg: = <-ch
fmt.Println (MSG)

I forrige eksempel oppretter vi en grunnleggende goroutine for å sende dataene til kanalen "CH". Vi mottar deretter dataene fra kanalen og skriver dem ut.

Sender struktur via kanal

Vi kan også sende strukturdata gjennom en kanal, forutsatt at vi oppretter kanalen med riktig type.

Tenk på følgende kodeeksempel:

pakkehoved
Importer "FMT"
Skriv brukerstruktur
FirstName, Lastnamestring

FUNCMAIN ()
user1: = bruker "Jane", "doe"
CH: = Make (Chan bruker)
gofunc ()
Ch<- user1
()
første_navn: = (<-ch).FirstName
fmt.Println (første_navn)

Hvis vi kjører forrige kode, skal den skrive ut fornavnet som mottatt av strukturen som ble sendt gjennom kanalen.

Ensrettede kanaler

Som nevnt er GO -kanaler toveis som standard. Vi kan imidlertid definere en kanal slik at den enten kan sende eller motta verdier, men ikke begge deler. Dette er kjent som en ensrettet kanal.

Syntaksen er som vist:

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

Legg merke til kanaloperatørens plassering i forrige syntaks.

Følgende eksempel oppretter en kun kanal:

pakkehoved
Importer "FMT"
Skriv brukerstruktur
FirstName, Lastnamestring

FUNCMAIN ()
CH: = Make (Chan<- string)
gofunc ()
Ch<- "Hi"
()
msg: = <- ch

Merk den forrige kanalen er satt til Send-Only. Vi prøver imidlertid å motta gjennom kanalen, og kompilatoren returnerer en feil som vist:

Ugyldig operasjon: <-ch (receive fra Send-bare type Chan<- string)

Lukkende kanaler

Vi kan lukke en kanal etter at de nødvendige verdiene er sendt. For det bruker vi den nære funksjonen. Det tar navnet på kanalen. Den lukker deretter kanalen og returnerer en boolsk verdi som du kan bruke for å sjekke om kanalen er lukket.

Et eksempel er vist nedenfor:

pakkehoved
Importer "FMT"
Skriv brukerstruktur
FirstName, Lastnamestring

FUNCMAIN ()
CH: = Make (ChanString)
gofunc ()
Ch<- "Hi"
()
_, OK: = <-ch
Lukk (CH)
hvis !ok
fmt.Println ("Stengt ... [OK]")

fmt.Println ("Lukk ... [mislykkes!] ")

Det forrige eksemplet lukker kanalen ved å bruke close () -metoden. Vi bruker deretter den boolske verdien som returneres fra funksjonen for å sjekke om kanalen er lukket.

Konklusjon

Denne guiden leder deg gjennom hvordan du jobber med kanaler i Go -programmeringsspråket. Prosessen med å lage en kanal, sende og motta verdier, sende strukturdata via en kanal, forklare ensrettede kanaler og lukke kanalene ble diskutert. Vi håper du fant denne artikkelen nyttig. Sjekk ut de andre Linux -hint -artiklene for flere tips og informasjon.