code: func Glob(fs http.FileSystem, pattern string) (matches []string, err error) {
  	if !hasMeta(pattern) {
  		if _, err = vfsutil.Stat(fs, pattern); err != nil {
  			return nil, nil
  		}
  		return []string{pattern}, nil
  	}
  
  	dir, file := path.Split(pattern)
  	switch dir {
  	case "":
  		dir = "."
  	case string(separator):
  		// nothing
  	default:
  		dir = dir[0 : len(dir)-1] // chop off trailing separator
  	}
  
  	if !hasMeta(dir) {
  		return glob(fs, dir, file, nil)
  	}
  
  	var m []string
  	m, err = Glob(fs, dir)
  	if err != nil {
  		return
  	}
  	for _, d := range m {
  		matches, err = glob(fs, d, file, matches)
  		if err != nil {
  			return
  		}
  	}
  	return
  }
docs: // Glob returns the names of all files matching pattern or nil
  // if there is no matching file. The syntax of patterns is the same
  // as in path.Match. The pattern may describe hierarchical names such as
  // /usr/*/bin/ed.
  //
  // Glob ignores file system errors such as I/O errors reading directories.
  // The only possible returned error is ErrBadPattern, when pattern
  // is malformed.