我正在尝试制作一个以循环方式重定向到服务器的主程序。在这种情况下,主服务器侦听端口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,而无需进行重定向。