2015-03-24 2 views
1

Я использую гориллу веб-инструментарий и golang, и имею следующий кодКак правильно сопоставить шаблон с маршрутизаторами handleFunc?

func test(w http.ResponseWriter, r *http.Request) { 
    fmt.Println("test was called ..") 
} 

func main() { 
    runtime.GOMAXPROCS(runtime.NumCPU()) 
    mx := mux.NewRouter() 
    mx.HandleFunc(?, test) 
    http.ListenAndServe(":8080", mx) 
} 

Мой сервер будет служить HTML-документ с формой, которая будет делать GET-запрос и отправить «/? ID = { что нибудь}". Как настроить шаблон в файле mx.HandleFunc для соответствия запросу, чтобы вызвать вызов?

Я попытался:

"/?id={something}, 
"/?id=", 
mx.HandleFunc("/", test).Queries("id") 
mx.HandleFunc("/", test).Methods("POST") 

(последний один я изменил соответствующий код страницы, так что форма делает пост вместо этого).

ответ

2

При использовании .Queries() вы должны дать ему как ключ и значение, как:

mx.HandleFunc("/", test).Queries("id", "value") 

Вы также можете использовать шаблон в качестве значения, как:

mx.HandleFunc("/", test).Queries("id", "{id:[0-9]+}") 

Смотрите здесь подробности: http://godoc.org/github.com/gorilla/mux#Route.Queries

+0

Я прочитал godoc и пробовал это: mx.HandleFunc ("/", test) .Queries ("id", "bar"). Я печатаю r.URL.String() из запроса и получаю «/? Id = bar», но он переходит только на frontPage-func (mx.HandleFunc («/», frontPage). Я ожидал, что он будет звонить test(), так как это был запрос или оба теста() frontPage(), поскольку он подходит для обоих шаблонов. – stian

+0

Ahhh, я думаю, что знаю, что происходит. Это проблема с handleFuncs, которая является проблемой. default case "/" first (который также соответствует (и ловит) "/? id =")), поэтому, изменяя порядок работы, в любом случае спасибо. – stian