Senden Sie stdin-Tastenanschläge an den Kanal, ohne dass ein Zeilenumbruch erforderlich ist

8

Ich möchte die Tastenanschläge des Benutzers direkt an einen Kanal senden, nachdem jeder einzelne Tastendruck auf stdin ausgeführt wurde.

Ich habe den folgenden Code versucht, aber das führt nicht zum gewünschten Ergebnis, da die Methode reader.ReadByte() blockiert, bis ein neuer Zeilenumbruch eingegeben wird.

%Vor%

Danke, dass Sie mir Ratschläge geben können, wie ich jedes Benutzereingabezeichen dazu bringen kann, sofort zum Kanal zu wechseln, ohne dass ein Zeilenumbruchzeichen erforderlich ist.

    
Kim 10.09.2012, 23:00
quelle

2 Antworten

10

Stdin ist standardmäßig gepuffert. Das bedeutet, dass Sie keine Eingabe erhalten, bis ein Zeilenumbruch gefunden wird. Dies ist keine Go-spezifische Sache.

Das Verhalten auf nicht gepufferte Weise ist sehr plattformspezifisch. Wie Rami vorgeschlagen hat, ist ncurses eine Möglichkeit, dies zu tun. Eine weitere Option ist das viel leichtere Paket go-termbox .

Wenn Sie alles manuell (zumindest unter Linux) machen möchten, können Sie sich C-Bindungen für termios oder syscalls direkt in Go.

Wie Plattformen wie Windows damit umgehen, weiß ich nicht. Sie können in den Quellcode für ncurses oder termbox eintauchen, um zu sehen, wie sie es gemacht haben.

    
jimt 11.09.2012, 00:49
quelle
4

Wenn Sie auf Linux sind, sollten Sie sich das Paket Goncurses ansehen

Ссылка

Es hat die Funktion: GetChar () was Sie wollen.

    
Rami Jarrar 11.09.2012 00:35
quelle

Tags und Links