Des E/S non bloquantes dans le langage Go peuvent être obtenues en utilisant des tubes : Créez un tube sans tampon : make(chan int) Envoyez des données au tube : ch <- 1 Recevez des données du tube : val := < -ch Cas pratique : Créer un programme de lecture de fichiers non bloquant
Les tuyaux sont un moyen efficace de communiquer dans des programmes Go simultanés. Ils permettent un code basé sur des événements, dans lequel chaque étape s'exécute indépendamment tandis que les données circulent de manière asynchrone dans le pipeline. Cet article montrera comment utiliser les canaux pour implémenter des E/S non bloquantes dans le langage Go.
Créer une pipe est très simple : une pipe non tamponnée de type
package main import "fmt" func main() { ch := make(chan int) }
make(chan int)
创建一个可以容纳 int
. L'absence de tampon signifie que les données sont transférées immédiatement d'une coroutine à une autre, ce qui est essentiel pour les applications d'E/S hautes performances.
Envoyer des données vers le pipe :
ch <- 1
Recevoir des données depuis le pipe :
val := <-ch
Créons un programme de lecture de fichiers non bloquant. Supposons que le contenu du fichier soit :
Hello World
package main import ( "fmt" "bufio" "os" ) func main() { ch := make(chan string) file, err := os.Open("file.txt") if err != nil { fmt.Println(err) return } defer file.Close() go func() { scanner := bufio.NewScanner(file) for scanner.Scan() { ch <- scanner.Text() } ch <- "" // 标记文件读完 }() // 从管道中以非阻塞方式读取行 for { line := <-ch if line == "" { break } fmt.Println(line) } }
Le programme crée un canal pour transférer les lignes du fichier. Une coroutine est responsable de la lecture du fichier et de l'envoi des lignes au tube. La coroutine principale reçoit alors les lignes du tube, et comme le tube n'est pas bloquant, elle peut continuer à effectuer d'autres tâches même si la lecture du fichier n'est pas terminée.
Lorsque la lecture du fichier est terminée, envoyez une ligne vide pour notifier à la coroutine principale de quitter la boucle.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!