一个普通的web服务如下
package main
import (
"fmt"
"net/http"
)
func handler(writer http.ResponseWriter, request *http.Request) {
fmt.Fprintf(writer, "hello world!")
}
func main() {
http.HandleFunc("/", handler)
http.ListenAndServe(":8000", nil)
}
访问http://localhost:8000
输出hello world!
如果想使用/pro/1来访问id=1的pro信息就无法实现,需要使用第三方库
go get -u github.com/gorilla/mux
func main() {
r := mux.NewRouter()
r.HandleFunc("/login", login)
r.HandleFunc("/products/{key}", ProductHandler)
r.HandleFunc("/articles/{category}/", ArticlesCategoryHandler)
r.HandleFunc("/articles/{category}/{id:[0-9]+}", ArticleHandler)
http.Handle("/", r)
http.ListenAndServe(":9091", nil)
}
这里面key,category都是属于变量,只要符合上面的路由路径,就是跳到相应的函数中,如何获取key,category这样的变量呢?
获取变量方式
func ArticlesCategoryHandler(w http.ResponseWriter, r *http.Request) {
vars := mux.Vars(r)
w.WriteHeader(http.StatusOK)
fmt.Fprintf(w, "Category: %v\n", vars["category"])
}
如果只是需要POST请求
r.HandleFunc("/login", login).Methods("POST")