Documentation ¶
Index ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type Param ¶
type Param struct {
Key, Value string
}
Param is a url parameter where key is the url segment pattern (without :) and value is the actual segment of a matched url. e.g. url /foo/123 matches /foo/:id, the url param has key "id" and value "123"
func ParamsFromContext ¶
ParamsFromContext pulls the URL parameters from a request context, or returns nil if none are present.
type Router ¶
type Router struct { // If enabled, the router checks if another method is allowed for the // current route, if the current request can not be routed. // If this is the case, the request is answered with 'Method Not Allowed' // and HTTP status code 405. // If no other Method is allowed, the request is delegated to the NotFound // handler. HandleMethodNotAllowed bool // Configurable http.Handler which is called when a request // cannot be routed and HandleMethodNotAllowed is true. // If it is not set, http.Error with http.StatusMethodNotAllowed is used. // The "Allow" header with allowed request methods is set before the handler // is called. MethodNotAllowed http.Handler // Configurable http.Handler which is called when no matching route is // found. If it is not set, http.NotFound is used. NotFound http.Handler // Function to handle panics recovered from http handlers. // It should be used to generate a error page and return the http error code // 500 (Internal Server Error). // The handler can be used to keep your server from crashing because of // unrecovered panics. PanicHandler func(http.ResponseWriter, *http.Request, interface{}) // contains filtered or unexported fields }
Router dispatches http requests to a registered http.Handler. It implements a similar interface to the one in github.com/julienschmidt/httprouter, the main differences are: 1. this router does not treat "/a/:b" and "/a/b/c" as conflicts (https://github.com/julienschmidt/httprouter/issues/175) 2. this router does not treat "/a/:b" and "/a/:c" as different routes and therefore does not allow them to be registered at the same time (https://github.com/julienschmidt/httprouter/issues/6) 3. this router does not treat "/a" and "/a/" as different routes Also the `*` pattern is greedy, if a handler is register for `/a/*`, then no handler can be further registered for any path that starts with `/a/`
type Trie ¶
type Trie struct {
// contains filtered or unexported fields
}
Trie is a radix trie to store string value at given url path, a trie node corresponds to an arbitrary path substring.
func (*Trie) Get ¶
Get returns the http.Handler for given path, returns error if not found. It also returns the url params if given path contains any, e.g. if a handler is registered for "/:foo/bar", then calling Get with path "/xyz/bar" returns a param whose key is "foo" and value is "xyz".
func (*Trie) Set ¶
Set sets the value for given path, returns error if path already set. When a http.Handler is registered for a given path, a subsequent Get returns the registered handler if the url passed to Get call matches the set path. Match in this context could mean either equality (e.g. url is "/foo" and path is "/foo") or url matches path pattern, which has two forms: - path ends with "/*", e.g. url "/foo" and "/foo/bar" both matches path "/*" - path contains colon wildcard ("/:"), e.g. url "/a/b" and "/a/c" bot matches path "/a/:var"