Я пытаюсь создать основную программу, которая перенаправляет на серверы циклическим образом.В этом случае мастер прослушивает порт 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 без перенаправления без проблем.