title: Understanding goroutines
body: <p>I'm trying to understand concurrency in Go.  In particular, I wrote this thread-unsafe program:</p>
  
  <pre class="lang-go prettyprint-override"><code>package main
  
  import "fmt"
  
  var x = 1
  
  func inc_x() { //test
    for {
      x += 1
    }
  }
  
  func main() {
    go inc_x()
    for {
      fmt.Println(x)
    }
  }
  </code></pre>
  
  <p>I recognize that I should be using channels to prevent race conditions with <code>x</code>, but that's not the point here.  The program prints <code>1</code> and then seems to loop forever (without printing anything more).  I would expect it to print an infinite list of numbers, possibly skipping some and repeating others due to the race condition (or worse -- printing the number while it is being updated in <code>inc_x</code>).</p>
  
  <p>My question is:  Why does the program only print one line?</p>
  
  <p>Just to be clear:  I'm not using channels on purpose for this toy example.</p>