go channel问题

9 / 154
package main

import (
  "fmt"
  "sync"
  "time"
)


var wg sync.WaitGroup

func main() {
   baton := make(chan int)
   wg.Add(1)
   go Runner(baton)
   baton <- 1
   wg.Wait()

}


func Runner(baton chan int) {

   var newRunner int
   runner := <-baton
   fmt.Printf("Runner %d \n", runner)

   if runner != 4 {
     newRunner = runner + 1
     go Runner(baton)
   }

   time.Sleep(100 * time.Millisecond)
   if runner == 4 {
     wg.Done()
     return
   }

   baton <- newRunner

}

go Runner(baton)为什么还能取到baton <- newRunner传入的值(执行顺序正常)