go-examples/go-cat2/main.go

55 lines
889 B
Go
Raw Normal View History

2017-07-07 12:46:40 +00:00
package main
import "fmt"
import "io"
import "log"
import "os"
import "strings"
var err error
var reader io.Reader
const BUFSIZE = 32 * 1024
func openFile(path *string) *os.File {
f, err := os.Open(os.Args[1])
if err != nil {
log.Fatalln(err)
}
return f
}
func readMe(r io.Reader) {
var n int
buf := make([]byte, BUFSIZE)
for {
n, err = r.Read(buf)
if n == 0 || err == io.EOF {
break
}
if err != nil {
log.Fatalln("Read error", err)
}
fmt.Printf("%s", buf[:n])
}
}
func main() {
if len(os.Args) <= 1 {
var content string
if _, err := fmt.Scanln(&content); err != nil {
log.Fatalln(err)
}
reader = strings.NewReader(content)
} else {
readers := []io.Reader{}
for i := 1; i < len(os.Args); i++ {
f := openFile(&os.Args[i])
defer f.Close()
readers = append(readers, f)
}
reader = io.MultiReader(readers...)
}
readMe(reader)
}