大猩猩mux路由器处理程序

时间:2014-09-28 16:14:21

标签: go mux

我不能让大猩猩多功能工作..

请求http://www.localhost:9000时,网络服务器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)
    }
}

1 个答案:

答案 0 :(得分: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"