code: func (n *node) findChild(path string) *node {
  	for _, n = range n.children {
  		if n.isParameter() {
  			paramEnd := strings.IndexByte(path, '/')
  			if paramEnd == -1 { // Path ends with the parameter.
  				if n.re != nil && !n.re.MatchString(path) {
  					continue
  				}
  				return n
  			}
  			if n.re != nil && !n.re.MatchString(path[:paramEnd]) {
  				continue
  			}
  			return n.findChild(path[paramEnd:])
  		}
  		if !strings.HasPrefix(path, n.s) { // Node doesn't match beginning of path.
  			continue
  		}
  		if len(path) == len(n.s) { // Node matched until the end of path.
  			return n
  		}
  		child := n.findChild(path[len(n.s):])
  		if child == nil || child.handler == nil {
  			if !n.isRoot && n.isWildcard() { // If node is a wildcard, don't use it when it's root.
  				return n
  			}
  			continue // No match from children and current node is not a wildcard, maybe there is a parameter in next same-level node.
  		}
  		return child
  	}
  	return nil
  }
docs: // findChild returns the deepest node matching path.