code: func gatherStack() string {
  	root := runtime.GOROOT()
  	stack := make([]string, 0, 10)
  	pc := make([]uintptr, 10)
  	depth := runtime.Callers(4, pc)
  	for i := 0; i < depth; i++ {
  		f := runtime.FuncForPC(pc[i])
  		file, line := f.FileLine(pc[i])
  		if strings.HasPrefix(file, root) {
  			continue
  		}
  
  		path := strings.Split(f.Name(), "/")
  		pl := len(path)
  		fun := path[pl-1]
  		fa := strings.Split(fun, ".")
  		if fa[0] == "server" && pl >= 2 {
  			fa[0] = path[pl-2]
  		}
  		w := strings.Join(fa, ".")
  		stack = append(stack, fmt.Sprintf("\t%s:%d %s", file, line, w))
  	}
  	return "\n" + strings.Join(stack, "\n")
  }
docs: // gatherStack generates a stack trace to attach to error messages.