- Necesito escribir una función que cuando se le da la ruta de una carpeta escanea los archivos enraizados en esa carpeta.
- Y luego necesito mostrar la estructura del directorio en esa carpeta.
Sé cómo hacer 2 (voy a usar jstree para mostrarlo en el navegador).

Respuestas:
EDITAR : Suficiente gente todavía ha dado con esta respuesta, que pensé en actualizarla para la API Go1. Este es un ejemplo funcional de filepath.Walk () . El original está debajo.
Tenga en cuenta que filepath.Walk recorre el árbol de directorios de forma recursiva.
Esta es una ejecución de ejemplo:
SIGUE LA RESPUESTA ORIGINAL: La interfaz para rutas de archivos móviles ha cambiado semanalmente desde el 16 de septiembre de 2011, consulte http://groups.google.com/group/golang-nuts/msg/e304dd9cf196a218 . El siguiente código no funcionará para las versiones de lanzamiento de GO en un futuro próximo.
En realidad, hay una función en la biblioteca estándar solo para esto: filepath.Walk .
fuente
filepath.Walkno sigue enlaces simbólicos por cierto.filepath.Walkdevolución de llamada de @FrancescoPasa se activará en los enlaces simbólicos (tanto el archivo como el directorio). Sí, no los seguirá , pero la devolución de llamada reconocerá un enlace simbólico y tomará medidas adicionales, es decir, un seguimiento,filepath.Walkasegurándose primero de que la ruta aún no se haya visitado.He aquí una forma de obtener información de archivo para los archivos en un directorio.
fuente
Readdirparámetro del método esnunint. Sin <= 0,Readdirdevuelve todo elFileInfodel directorio en un solo segmento.osfunc (FileMode) IsRegular.Aquí hay un ejemplo para recorrer todos los archivos y directorios de forma recursiva. Tenga en cuenta que si desea saber si la ruta que está agregando es un directorio, simplemente marque "f.IsDir ()".
fuente
mainmétodo no debería tener([]string, error)argumentos y necesitas hacer algo conerr. ¿A menos que al momento de contestar fuera válido? Definitivamente un error de compilación en versiones más recientes. De lo contrario, muy útil, gracias.El paquete
github.com/kr/fsproporciona unaWalkerAPI muy interesante.fuente
El paquete estándar Go
ioutiltiene una función incorporada para este caso, vea el ejemplo a continuaciónfuente
Tenga en cuenta que "Walk no sigue enlaces simbólicos", por lo que si está buscando escribir una función que lo haga, le recomiendo ioutil.ReadDir . Mi propia prueba comparativa mostró que es más rápido y requiere menos memoria que filepath.Glob .
Además,
ioutil.ReadDirordena los archivos por nombre de base mediante la comparación de cadenas básica (strA > strB). Como usuario de devops, generalmente clasifico los nombres de los directorios haciendo una comparación numérica inversa (la última compilación primero, por ejemplo). Si ese también es su caso, entonces es mejor llamar directamente a os.ReadDir (ioutil.ReadDirestá llamando a esto bajo las sábanas) y hacer la clasificación usted mismo.A continuación, se muestra un ejemplo de la
ReadDirpieza con ordenación numérica:fuente
Es posible que desee realizar funciones de búsqueda aquí, de modo que pueda utilizar completamente la búsqueda
fuente