Uma pergunta relacionada aos pty-s (pseudo-terminais) e à maneira como (cat) golang os lê.
Primeiro, fiz o seguinte.
- abra dois terminais (
dev/pts/0
- 0 edev/pts/1
- 1) - então eu digito no segundo terminal "cat dev/pts/0" (então o que estiver escrito no primeiro terminal será exibido no segundo)
- comece a escrever no primeiro terminal (TUI)
Geralmente funciona na maior parte do tempo, mas alguns caracteres são pulados de vez em quando.
Mais precisamente, para aqueles caracteres que não são exibidos no segundo terminal, eu tenho echo, enquanto para aqueles que são exibidos, eu não tenho. É como se echo e cat estivessem competindo por caracteres.
Entretanto, quando trabalho com as funções de varredura golang e fmt, sempre que escrevo algo no terminal (e, portanto, no /dev/pts/0
terminal), a função de varredura lê tudo (nenhum byte faltando) + o conteúdo inserido é exibido na TUI ("echo" funciona neste caso).
package main
import "fmt"
func main() {
var input string
fmt.Println("Enter text:")
for {
fmt.Scanln(&input)
fmt.Println("You wrote:", input)
}
}
Portanto, neste caso, parece que não existe "competição" entre echo e golang...
Espero o mesmo comportamento em ambos os casos. Em particular, ler todos os bytes em ambos os casos e ter (ou não ter) um eco em ambos os casos.
Qual é a diferença? Por que "cat" às vezes pula bytes ao ler de outro terminal, mas a função de varredura golang não? Eu pensei que o golang apenas lê de "dev/pts/0" da mesma forma que "cat" faz e apenas dá o resultado.