I just started using go and wrote my first program but the output is not as expected. I have writtern a async routine addUrl which adds url to channel 5000 times and consumeUrl removes from the channel and prints it. The routine runs only 9 time. Why is it? Below is the code and output
package main
import "fmt"
import "time"
var urlCount = 0
func main(){
    urlHolder := make(chan string,5000)
    fmt.Printf("Starting program")
    go addUrls(urlHolder)
    time.Sleep(time.Millisecond * 100)
    go consumeUrls(urlHolder)
    fmt.Printf("Done")
}
func addUrls(urlHolder chan string){
    var myurl string = "https://example.com/"
    for i:=0; i<5000 ; i++ {
        urlHolder<-myurl
        fmt.Printf(" %d url added \n",i)
        time.Sleep(time.Millisecond * 10)
    }
}
func consumeUrls(urlHolder chan string) {
    urlCount++
    urlsConsumed := <- urlHolder
    fmt.Printf("Pulled url %d",urlCount," ",urlsConsumed,"\n")
    time.Sleep(time.Millisecond * 20)
}  
The output is
Starting program
 0 url added 
 1 url added 
 2 url added 
 3 url added 
 4 url added 
 5 url added 
 6 url added 
 7 url added 
 8 url added 
Done
Why is it terminating at 8 when loop is 5000?