title: Golang: panic: runtime error: invalid memory address or nil pointer dereference using bufio.Scanner
body: <p>I am implementing a go program which uses bufio.Scanner and bufio.Writer i have packaged my code as follows </p>
  
  <pre><code>package main
  
  import (
      "fmt"
      "player/command"
      "strings"
  )
  
  func main() {
      //Enter your code here. Read input from STDIN. Print output to STDOUT
  
  
  
      for commands.Scanner.Scan() {
  
          //scan a new line and send it to comand variable to check command exist or not
          input := strings.Split(strings.Trim(commands.Scanner.Text(), " "), " ")
          command := input[0]
  
          if command == "" {
              fmt.Printf("$ %s:", commands.Pwd)
              continue
          }
  
          if !commands.Commands[command] {
              commands.ThrowError("CANNOT RECOGNIZE INPUT.")
  
          } else {
  
              commands.Execute(command, input[1:], nil)
  
          }
          fmt.Printf("$ %s:", commands.Pwd)
      }
  }
  </code></pre>
  
  <p>I am also using init.go file in main package as follows</p>
  
  <pre><code>package main
  
  import (
      "flag"
      "player/source"
  )
  
  func init() {
      sourceFlag := flag.String("filename", "", "if input is through source file")
      flag.Parse()
      if *sourceFlag != "" {
          source.Input(*sourceFlag)
      }
  }
  </code></pre>
  
  <p>and my final package player/source is as follows :-</p>
  
  <pre><code>package source
  
      import (
          "bufio"
          "log"
          "os"
          "player/command"
      )
  
      func Input(source string) {
          if source != "" {
              readFile, err := os.OpenFile(source, os.O_RDONLY, os.ModeExclusive)
              if err != nil {
                  log.Fatal(err)
              }
              commands.Scanner = bufio.NewScanner(readFile)
              writeFile, err := os.Create(source + "_output.txt")
              if err != nil {
                  log.Fatal(err)
              }
              commands.Writer = bufio.NewWriter(writeFile)
          } else {
              commands.Scanner = bufio.NewScanner(os.Stdin)
              commands.Writer = bufio.NewWriter(os.Stdout)
              // fmt.Println(commands.Scanner)
          }
      }
  </code></pre>
  
  <p>Execution of this code results in </p>
  
  <pre><code>panic: runtime error: invalid memory address or nil pointer dereference
  [signal 0xb code=0x1 addr=0x58 pc=0x4a253a]
  
  goroutine 1 [running]:
  bufio.(*Scanner).Scan(0x0, 0x5)
      /usr/local/go/src/bufio/scan.go:120 +0x2a
  main.main()
      /home/xyz/dev/go/src/players/main.go:13 +0x124
  </code></pre>
  
  <p>I dont know the reason even after initializing my scanner why i am not been able to read from it</p>