/* Want to write from os.Stdin to os.Stdout(fmt.Println() in below code) using channels*/
package main
import (
"fmt"
"io"
"os"
"bufio"
)
type message []byte
/* Function to run the groutine to run for stdin read */
func read (r io.Reader) <-chan message{
lines := make (chan message)
go func() {
defer close(lines)
scan := bufio.NewScanner(r)
for scan.Scan() {
lines <- message(scan.Bytes())
}
}()
return lines
}
func main() {
mes := make (chan message, 1)
sig := make (chan bool)
ch := read (os.Stdin) //Reading from Stdin
for {
select {
case anu := <-mes:
fmt.Println("Message to stdout")
fmt.Println(string(anu)) //Writing to Stdout
case mes <- <-ch:
fmt.Println("Message to channel 2")
continue
}
}
<-sig
/*
The O/P is :
go run writetochan.go
Golang
Message to channel 2
Fun <<< Delayed O/P golang means after putting one more
message only we are getting First message
Message to stdout
Golang
Expected O/P:
go run writetochan.go
Golang
Message to channel 2
Message to stdout
Golang
Fun
Message to channel 2
*/
}
Möchten Sie die o/P wie oben gezeigt erreichen.Möchten Sie von os.Stdin zu os.Stdout mit den Kanälen schreiben
Wir schreiben von einem Kanal, der die gesamte stdin vom Benutzer liest und dann in die stdout schreibt. Der Kanal liest sich in Goroutine. Ein Dummy-Kanal wird gebildet (sig), so dass wir ihn unbegrenzt laufen können (nur für den Moment).
Ich denke, diese Hausaufgaben? – Flimzy
Sie können das von einem bufio.Scanner verwendete Slice nicht teilen - aus der Dokumentation: 'Das zugrunde liegende Array kann auf Daten zeigen, die bei einem nachfolgenden Aufruf von Scan überschrieben werden. – JimB
Bitte' gofmt' verwenden. Ich weiß, dass man eine Menge Kritik darüber bekommt, ob man zu eigenwillig den WRT-Codierungsstil benutzt, aber die Art und Weise, wie der Code aussieht, macht es für Leute schwieriger, die sich an die Golaf-Standardformatierung gewöhnt haben. Der zusätzliche Platz in Anweisungen wie 'sig: = make (chan bool)' und die zusätzliche Ebene der Einrückung für Ihre'Auswahl'-Blöcke sollten nicht dort sein –