package main import ( "fmt" "io" "net/http" "sync" ) type Downloader interface { Download(url string) } type Task struct{} func (t *Task) Download(url string) { fmt.Println("Downloading:", url) resp, err := http.Get(url) if err != nil { fmt.Println("Error:", err) return } defer resp.Body.Close() if resp.StatusCode != 200 { fmt.Println("Downloaded:", resp.Status) return } else { body, err := io.ReadAll(resp.Body) if err != nil { fmt.Println("Error:", err) return } fmt.Println(string(body)) } } func main() { // 多个url urls := []string{ "https://www.cnblogs.com/apachecn/p/19074830", "https://www.cnblogs.com/apachecn/p/19074830", } wg := sync.WaitGroup{} for _, url := range urls { wg.Add(1) go func(url string) { defer wg.Done() t := &Task{} t.Download(url) }(url) } wg.Wait() fmt.Println("all tasks done") }