1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
package main

import (
    "fmt"
    "time"
    "strconv"
    "net/http"
    "io/ioutil"

)

var (
    maxRoutineNum = 5
)


func main() {
    ch  := make(chan int, maxRoutineNum)

    for i := 1; i < 2000000; i++ {
        ch  <- 1
        go func(i int) {

            run(i)

            defer func() { <-ch }()
        }(i)
        fmt.Println("+")
    }

    //确保执行完后主线程再退出
    for i := 0; i < 10; i++ {
        ch <- 1
    }


}

func run(s int){
    str := strconv.Itoa(s)
    fmt.Println("*"+str+"*")

    HttpGet("https://xg623.oss-cn-hongkong.aliyuncs.com/623.apk",str)

    //time.Sleep(1*time.Second)
    time.Sleep(1*time.Microsecond)
}

func HttpGet(url string,s string) (string,error){
    resp, err := http.Get(url+"?rnd="+s)
    if err != nil {
        fmt.Println(err)
        return "",err
    }
    defer resp.Body.Close()
    body, err := ioutil.ReadAll(resp.Body)
    if err != nil {
        fmt.Println(err)
        return "",err
    }
    err = ioutil.WriteFile("E:\\GoPro\\src\\test\\down\"+s, body, 0777)
    if err != nil {
      fmt.Println(err)
      return "",err
    }
    return string(body),nil
}