在Go中使用频道重定向

时间:2018-12-02 20:03:55

标签: web-services http go

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

0 个答案:

没有答案