main.go 887 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. package main
  2. import (
  3. "fmt"
  4. "io"
  5. "net/http"
  6. "sync"
  7. )
  8. type Downloader interface {
  9. Download(url string)
  10. }
  11. type Task struct{}
  12. func (t *Task) Download(url string) {
  13. fmt.Println("Downloading:", url)
  14. resp, err := http.Get(url)
  15. if err != nil {
  16. fmt.Println("Error:", err)
  17. return
  18. }
  19. defer resp.Body.Close()
  20. if resp.StatusCode != 200 {
  21. fmt.Println("Downloaded:", resp.Status)
  22. return
  23. } else {
  24. body, err := io.ReadAll(resp.Body)
  25. if err != nil {
  26. fmt.Println("Error:", err)
  27. return
  28. }
  29. fmt.Println(string(body))
  30. }
  31. }
  32. func main() {
  33. // 多个url
  34. urls := []string{
  35. "https://www.cnblogs.com/apachecn/p/19074830",
  36. "https://www.cnblogs.com/apachecn/p/19074830",
  37. }
  38. wg := sync.WaitGroup{}
  39. for _, url := range urls {
  40. wg.Add(1)
  41. go func(url string) {
  42. defer wg.Done()
  43. t := &Task{}
  44. t.Download(url)
  45. }(url)
  46. }
  47. wg.Wait()
  48. fmt.Println("all tasks done")
  49. }