Golang例程提前终止

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 
",i)
        time.Sleep(time.Millisecond * 10)
    }

}

func consumeUrls(urlHolder chan string) {
    urlCount++
    urlsConsumed := <- urlHolder
    fmt.Printf("Pulled url %d",urlCount," ",urlsConsumed,"
")
    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?

Actually The problem was like Nipun said, the main got terminated early.

You are using time.Sleep to wait for main to finish but you really should be using WaitGroups.

That way you don't have to try to pick some arbitrary time and hope it's enough for your program to finish, or worry about setting too much time and your program sits around doing nothing.

I've added the implementation of WaitGroups to your code here:

https://play.golang.org/p/1zn2JYefaA

Also, the way your consumeUrls function is written is not looping properly and you won't get everything in your channel printed. But since that wasn't your specific question I won't address it here.