Lecture à partir d'un port série avec boucle While en Go
En Go, la lecture à partir d'un port série nécessite de comprendre le fonctionnement de Read(). Alors que le programme original utilisait time.Sleep pour faire une pause avant de lire, une approche en boucle while est souvent préférée pour l'acquisition continue de données. Cependant, cela présente un défi en raison du comportement de Read().
Dans l'implémentation de la boucle while, Read() renverra les données chaque fois qu'elles seront disponibles, écrasant potentiellement le tampon à chaque itération de la boucle. Pour résoudre ce problème, nous devons attendre que toutes les données entrantes aient été reçues avant de lire.
Une solution consiste à utiliser un bufio.Reader, qui fournit une interface tampon pour lire à partir d'un flux. Il nous permet de spécifier un délimiteur, tel que « x0a » (saut de ligne), et d'attendre que ce délimiteur soit rencontré avant de renvoyer les données.
Le code révisé ci-dessous montre comment utiliser bufio.Reader pour lire des données. depuis un port série jusqu'à ce que le délimiteur 'x0a' soit reçu :
<code class="go">reader := bufio.NewReader(s) reply, err := reader.ReadBytes('\x0a') if err != nil { panic(err) } fmt.Println(reply)</code>
Ce code attendra que le délimiteur 'x0a' soit reçu avant de renvoyer les données dans la variable 'reply'. Le tampon utilisé par bufio.Reader garantit que les données ne sont pas écrasées lors de plusieurs appels Read().
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!