1

我无法让大猩猩混合器工作..

请求时http://www.localhost:9000由 Web 服务器返回404 page not found

但这有效http://localhost:9000/并且可以打印Hello world

package main

import (
    "net/http"
    "fmt"
    "log"
    "github.com/gorilla/mux"
)

func Handler(w http.ResponseWriter, r *http.Request){
    fmt.Fprint(w, "Hello world")
}

func main(){
    r := mux.NewRouter()
    r.Host("www.localhost")
    r.HandleFunc("/", Handler)
    err := http.ListenAndServe(":9000", r)
    if err != nil {
        log.Fatal("ListenAndServe error: ", err)
    }
}
4

1 回答 1

2

您希望能够同时支持 localhost 和 www.localhost

package main

import (
        "fmt"
        "log"
        "net/http"

        "github.com/gorilla/mux"
)

func Handler(w http.ResponseWriter, r *http.Request) {
        fmt.Fprint(w, "Hello world")
}

func main() {
        r := mux.NewRouter()
        r.Host("www.localhost").Path("/").HandlerFunc(Handler)
        r.HandleFunc("/", Handler)
        err := http.ListenAndServe(":9000", r)
        if err != nil {
                log.Fatal("ListenAndServe error: ", err)
        }
}

如果您仔细阅读文档,您会注意到 r.Host() 只是另一个模式匹配函数。它没有为该路由器设置任何全局规则。

如果您想让该规则被继承,您需要使用子路由器:

subrouter := r.Host("www.localhost").Subrouter()

然后你用“subrouter”代替“r”

于 2014-09-28T16:57:20.863 回答