code: func goGetFiles(dir string, pkgs []string) []string {
  	params := []string{
  		"Dir",
  		"GoFiles",
  		"CgoFiles",
  	}
  	var allFiles []string
  	rawTuples := goRun(goList(params, pkgs))
  	for _, raw := range rawTuples {
  		tuple := goSliceRawTuple(raw)
  		moduleDir := filepath.Clean(tuple[0])
  		dirSep := fmt.Sprintf("%s%c", dir, filepath.Separator)
  		moduleDirSep := fmt.Sprintf("%s%c", moduleDir, filepath.Separator)
  		if !strings.HasPrefix(moduleDirSep, dirSep) {
  			continue
  		}
  		relModuleDir, err := filepath.Rel(dir, moduleDir)
  		if err != nil {
  			common.Die("Could not make a relative path from %q to %q, even if they have the same prefix", moduleDir, dir)
  		}
  		files := append(goSliceRawSlice(tuple[1]), goSliceRawSlice(tuple[2])...)
  		for i := 0; i < len(files); i++ {
  			files[i] = filepath.Join(relModuleDir, files[i])
  		}
  		allFiles = append(allFiles, files...)
  	}
  	return allFiles
  }
docs: // goGetFiles returns a list of files that are in given packages. File
  // paths are relative to a given directory.