Перенаправление с использованием каналов в Go - PullRequest
0 голосов
/ 02 декабря 2018

Я пытаюсь создать основную программу, которая перенаправляет на серверы циклическим образом.В этом случае мастер прослушивает порт 9090, а затем перенаправляет на порт 9001 или 9000. Идея состоит в том, чтобы порты 9000 и 9001 удерживались в канале, который извлекается и добавляется функцией перенаправления.Однако на практике он всегда перенаправляет на 9000, а не на 9001. Правильно ли обновляется канал функцией перенаправления?или я что-то пропустил?Канал определенно содержит значения, сохраненные, поскольку я успешно перенаправлен с 9090 на 9000 каждый раз.

Функция перенаправления

func redirect(ports chan int) func(w http.ResponseWriter, r *http.Request) {
    return func(w http.ResponseWriter, r *http.Request) {
        channel := <-ports
        address := fmt.Sprintf("http://localhost:%d", channel)
        ports <- channel
        http.Redirect(w, r, address, 301)
    }
}

Мастер Основная функция

func main() {
    currentChannel := make(chan int, 2)
    go startServer("C:/Users", "9000")
    go startServer("C:/Users", "9001")
    currentChannel <- 9000
    currentChannel <- 9001
    http.HandleFunc("/", redirect(currentChannel))
    err := http.ListenAndServe(":9090", nil)
    if err != nil {
        log.Fatal("ListenAndServe: ", err)
    }
}

go startServerпросто запускает общий файловый сервер.Я протестировал каждый из них в отдельности, и у меня есть доступ к 9000 и 9001 без перенаправления без проблем.

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