Как вы можете использовать несколько URL в Go? - PullRequest
0 голосов
/ 17 октября 2019

Вот что у меня есть на данный момент:

package main

import (
    "encoding/json"
    "fmt"
    "io/ioutil"
    "log"
    "net/http"
)

func subscribe(urls Urls) []byte {
    req, err := http.NewRequest("GET", urls.Url, nil)
    if err != nil {
        log.Fatal(err)
    }

    req.Header.Set("authentication", "Bearer " + urls.Token)

    http_client := &http.Client{}
    res, err := http_client.Do(req)
    if err != nil {
        log.Fatal(err)
    }

    defer res.Body.Close()

    resourceResp, err := ioutil.ReadAll(res.Body)
    if err != nil {
        log.Fatal(err)
    }

    fmt.Println(string(resourceResp))

    var data map[string]interface{}

    error := json.Unmarshal([]byte(resourceResp), &data)
    if error != nil {
        log.Fatal(error)
    }

    return subscribe(urls)
}

type Urls struct {
    Url string
    Token string
}

func main() {
    var urls [2]Urls

    urls[0] = Urls{
        Url: "https://example.com/users/8",
        Token: "abcdefg",
    }

    urls[1] = Urls{
        Url:   "https://example.com/users/9",
        Token: "hijklmnop",
    }

    subscribe(urls[0])
    subscribe(urls[1])
}

Конечная цель - «подписаться» на несколько URL-адресов и извлекать любые обновленные данные (в конечном итоге добавлять их в очередь, но по одному шагу за раз). ). После этого восстановите соединение. Прямо сейчас запускается только первая подписка. Спасибо!

1 Ответ

2 голосов
/ 17 октября 2019

I думаю , что вы запрашиваете, чтобы функции subscribe выполнялись параллельно. Один из способов - обернуть их в goroutines и дождаться завершения всех goroutines :

func main() {
    ...
    ...
    var wg sync.WaitGroup

    wg.Add(len(urls))

    for _, url := range(urls) {
        go func() {
            defer wg.Done()
            subscribe(url)
        }()
    }

    wg.Wait()
}
...