Source File: go-coreutils/head/main.go

package main

import (
  "fmt"
  "bufio"
  "os"
  "log"
  "flag"
  "io"
)

func HeadFile(file io.Reader, count int) {
  scan := bufio.NewScanner(file)

  for cur_line := 0; scan.Scan(); cur_line++ {
    line := scan.Text()

    if cur_line < count {
      fmt.Println(line)
    }
  }

  if scan.Err() != nil { log.Fatal(scan.Err()) }
}

func main() {
  var count int

  flag.IntVar(&count, "n", 10, "number of lines")
  flag.Parse()

  if flag.NArg() > 0 {
    files := flag.Args()
    for _, fname := range files {
      file, err := os.Open(fname)
      if err != nil { log.Fatal(err) }

      HeadFile(file, count)
    }
  } else {
    HeadFile(os.Stdin, count)
  }
}