English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Corso di base di Golang

Istruzioni di controllo di Golang

Funzione e metodo di Golang

Struttura di Golang

Taglia e array di Golang

Stringa (String) di Golang

Puntatore di Golang

Interfaccia di Golang

Concordanza di Golang

Eccezioni (Error) di Golang

Articoli vari di Golang

Canale unidirezionale del linguaggio Go

Noto a tutti, i canali sono il mezzo di comunicazione tra i goroutine che eseguono in modo concorrente, quindi possono inviarsi e riceversi dati. Di default, i canali sono bidirezionali, ma è anche possibile creare canali unidirezionali. I canali che possono solo ricevere dati o solo inviare dati sonoCanale unidirezionale.I canali unidirezionali possono anche essere creati tramite la funzione make(), come mostrato di seguito:

//Utilizzato solo per ricevere dati
c1 := make(<- chan bool)
//Utilizzato solo per inviare dati
c2 := make(chan<- bool)

Esempio di utilizzo del canale unidirezionale 1:

package main 
  
import "fmt"
  
func main() { 
  
    //Utilizzato solo per ricevere dati
    mychanl1 := make(<-chan string) 
  
    //Utilizzato solo per inviare dati
    mychanl2 := make(chan<- string) 
  
    //Mostra il tipo del canale 
    fmt.Printf("%T", mychanl1) 
    fmt.Printf("\n%T", mychanl2) 
}

Output:

<-chan string
chan<- string

Conversione di un canale bidirezionale in un canale unidirezionale

In Go, è possibile convertire un canale bidirezionale in un canale unidirezionale,换句话说,puoi convertire un canale bidirezionale in un canale che può solo ricevere o solo inviare, ma anche al contrario. Come mostrato nel seguente programma:

package main 
  
import "fmt"
  
func sending(s chan<- string) { 
    s <- "w3codebox"
} 
  
func main() { 
  
    //Creazione di un canale bidirezionale
    mychanl := make(chan string) 
  
        //In questo caso, la funzione sending() trasforma il canale bidirezionale in un canale unidirezionale 
    go sending(mychanl) 
  
    //In questo caso, il canale è inviato solo all'interno del goroutine, mentre all'esterno del goroutine il canale è bidirezionale, quindi stampa w3codebox 
    fmt.Println(<-mychanl) 
}

Output:

w3codebox

Uso del canale unidirezionale:Il canale unidirezionale viene utilizzato per fornire la sicurezza del tipo del programma, riducendo così il numero di errori generati dal programma. Oppure, quando si desidera creare un canale che può solo inviare o ricevere dati, si può anche utilizzare un canale unidirezionale.