Desafío de Filtrado de Registros con Slices

GolangBeginner
Practicar Ahora

Introducción

En este desafío, desarrollarás una función de filtrado de registros basada en slices que procesa y extrae los mensajes de registro relevantes. El filtrado eficiente de registros es fundamental en el dinámico mundo de la ciberseguridad para identificar posibles amenazas de seguridad. El objetivo es implementar la función filterLogs para filtrar mensajes de registro basados en una palabra clave específica, asegurando que la función distinga entre mayúsculas y minúsculas y gestione adecuadamente los slices y palabras clave vacíos. Además, la función debe devolver únicamente el contenido del mensaje, excluyendo las marcas de tiempo u otros metadatos.

Este es un Desafío (Challenge), que a diferencia de un Laboratorio Guiado, requiere que intentes completar la tarea de forma independiente en lugar de seguir pasos detallados. Los desafíos suelen tener una dificultad mayor. Si encuentras dificultades, puedes consultar con Labby o revisar la solución. Los datos históricos muestran que este es un desafío de nivel principiante con una tasa de aprobación del 96%. Ha recibido una tasa de reseñas positivas del 88% por parte de los estudiantes.

Implementar la Función de Filtrado de Registros con Slices

Desarrolla una función de filtrado de registros basada en slices para procesar y extraer únicamente el contenido del mensaje (excluyendo las marcas de tiempo) para una palabra clave determinada.

Tareas

  • Implementar la función filterLogs que reciba un slice de entradas de registro y una palabra clave.
  • La función debe devolver un nuevo slice que contenga solo el contenido del mensaje de aquellas entradas que incluyan la palabra clave especificada.
  • Asegurarse de que la función distinga entre mayúsculas y minúsculas (case-sensitive).
  • Utilizar operaciones de slices en Go para filtrar y procesar las entradas de registro.
  • Gestionar correctamente los casos de slices vacíos y palabras clave vacías.

Requisitos

  • Crear la implementación en el archivo ~/project/logfilter.go.
  • Asegurarse de que la función no modifique el slice original y devuelva un nuevo slice con los resultados procesados.
  • No utilizar librerías externas para el filtrado.
  • Extraer y devolver solo el contenido del mensaje después de la palabra clave (por ejemplo, "Disk is almost full" en lugar de "2023-06-15 ERROR: Disk is almost full").
  • Utilizar funciones de manipulación de cadenas para procesar los registros.

Ejemplos

Dadas las siguientes entradas de registro:

logs := []string{
    "2023-06-15 ERROR: Security breach detected",
    "2023-06-15 INFO: System startup completed",
    "2023-06-15 WARN: Unauthorized access attempt",
    "2023-06-15 ERROR: Disk is almost full",
    "2023-06-15 INFO: User login",
    "2023-06-15 WARN: System temperature too high",
}
go run logfilter.go

Salida:

Error Logs: [Security breach detected Disk is almost full]
Warning Logs: [Unauthorized access attempt System temperature too high]
Info Logs: [System startup completed User login]

Consejos

  1. Iterar los Registros: Utiliza un bucle for para revisar cada entrada del registro.
  2. Buscar la Palabra Clave: Busca el patrón "<KEYWORD>: " dentro del registro.
  3. Extraer el Mensaje: Utiliza el seccionamiento de cadenas (slicing) para obtener la parte posterior a la palabra clave y los caracteres ": ".
  4. Gestionar Entradas Vacías: Devuelve un slice vacío si los registros o la palabra clave están vacíos.
  5. Agregar Resultados: Utiliza append para añadir los mensajes coincidentes a un nuevo slice.
✨ Revisar Solución y Practicar

Resumen

En resumen, este desafío requiere que implementes una función filterLogs que procese y extraiga de manera eficiente los mensajes de registro relevantes (excluyendo metadatos) de un slice de cadenas de registro basándose en una palabra clave proporcionada. La función debe distinguir entre mayúsculas y minúsculas, gestionar adecuadamente los slices y palabras clave vacíos, y demostrar competencia en el uso de operaciones de slices y manipulación de cadenas en Go para filtrar y devolver los mensajes de registro procesados.