package main
import (
"fmt"
"io"
"io/ioutil"
"net/http"
"os"
"time"
)
func main() {
//定义字符串类型的通道
ch := make(chan string)
args := os.Args[1:]
for _, url := range args {
//启动一个goroutine
go fetch(url, ch)
}
for range args {
//从通道ch接收
fmt.Println(<-ch)
}
}
func fetch(url string, ch chan<- string) {
start := time.Now()
resp, err := http.Get(url)
if err != nil {
//发送到通道
ch <- fmt.Sprint(err)
return
}
nbytes, err := io.Copy(ioutil.Discard, resp.Body)
if err != nil {
ch <- fmt.Sprint("while reading %s:%v", url, err)
return
}
secs := time.Since(start).Seconds()
ch <- fmt.Sprintf("%.2fs %7d %s", secs, nbytes, url)
}
编译main文件
go build main.go
执行
./main https://www.baidu.com https://www.weibo.com
运行结果
0.21s 227 https://www.baidu.com
0.32s 6170 https://www.weibo.com
goruntine 是一个并发执行的函数
通道(channel)是一种允许某一例程向另一个例程传递指定类型值的通信机制