Почему группы ожидания не заканчиваются? - PullRequest
0 голосов
/ 20 апреля 2020

Пожалуйста, помогите мне, пока этот код не заканчивается, я ноб-кодировщик ... и я сделал этот код разорванным с мест :)

использую список URL-адресов для подачи кода. пример: cat urls.txt | ./mygofile

пример списка URL-адресов (urls.txt)

https://id.answers.yahoo.com/KnowledgeSearchService
https://id.answers.yahoo.com/question/nextQuestion
https://beap.adss.yahoo.com/
https://id.answers.yahoo.com/search
https://id.answers.yahoo.com/KnowledgeSearchService
https://id.answers.yahoo.com/question/nextQuestion
https://beap.adss.yahoo.com/
https://id.answers.yahoo.com/search

package main

import (
    "log"
    "bufio"
    "sync"
    "fmt"
    "net/http"
    "os"
    "strings"
    "crypto/tls"
)

func main() {
    tr := http.DefaultTransport.(*http.Transport).Clone()
    tr.TLSClientConfig = &tls.Config{InsecureSkipVerify: true}
    client := &http.Client{Transport: tr}

    var wg sync.WaitGroup
    work := make(chan string)
    for i := 0; i < 10; i++ {
        wg.Add(i)
        go func() {
            defer wg.Done()
            for purl := range work {
                if !strings.Contains(purl, "://") {
                    purl = "https://" + purl
                }

                body := "<?xml version=\"1.0\"?>"
                fmt.Println(purl)
                req, err := http.NewRequest("POST", purl, strings.NewReader(body))
                if err != nil {
                    log.Println(err)
                    continue
                }

                req.Header.Add("Content-Type", "application/xml; charset=utf-8")
                resp, err := client.Do(req)
                if err != nil {
                    log.Println(err)
                    continue // stop here and process next item
                }

                // do something with resp

                resp.Body.Close()
            }
        }()
    }

    passedUrl := bufio.NewScanner(os.Stdin)
    for passedUrl.Scan() {
        work <- passedUrl.Text()
    }
    close(work)
     // signal workers to exit
    wg.Wait()   // wait for workers to exit

}

Пожалуйста, помогите мне с объяснением, почему код не заканчивается после того, как он сделан с URL.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...