Lista de contactos básica
Parte de la sección Lógica y Flujo del Journey de GO de Coddy — lección 66 de 68.
Desafío
FácilCrea un sistema de gestión de contactos que demuestre cómo los structs, los slices y las funciones trabajan juntos para organizar y mostrar información de contacto. Este desafío pondrá a prueba tu capacidad para definir estructuras de datos personalizadas, gestionar colecciones de datos e implementar funciones para manipular esos datos.
Recibirás dos entradas:
- Una cadena que contiene información de contacto en el formato
"name1:phone1:email1,name2:phone2:email2,name3:phone3:email3"(por ejemplo,"Alice Johnson:555-0123:alice@email.com,Bob Smith:555-0456:bob@email.com,Carol Davis:555-0789:carol@email.com") - Una cadena que contiene un nuevo contacto para agregar en el formato
"name:phone:email"(por ejemplo,"David Wilson:555-0321:david@email.com")
Tu tarea es:
- Definir un struct
Contactcon tres campos de tipo string:Name,PhoneyEmail - Crear una función llamada
addContactque reciba un slice de structsContacty un nuevoContact, y luego devuelva un nuevo slice con el contacto agregado - Crear una función llamada
displayContactsque reciba un slice de structsContacte imprima la información de cada contacto - Analizar la primera entrada dividiéndola por comas para obtener las entradas de contacto individuales
- Para cada entrada de contacto, dividir por dos puntos para extraer el nombre, el teléfono y el correo electrónico
- Crear structs
Contacta partir de los datos analizados y almacenarlos en un slice - Analizar la segunda entrada dividiéndola por dos puntos para crear un nuevo contacto
- Mostrar el encabezado de la aplicación:
"=== CONTACT MANAGEMENT SYSTEM ===" - Mostrar los contactos iniciales usando tu función
displayContactscon el encabezado:"Initial contact list:" - Mostrar el nuevo contacto que se está agregando:
"Adding new contact: [name] ([phone]) - [email]" - Usar tu función
addContactpara agregar el nuevo contacto al slice - Mostrar los contactos actualizados usando tu función
displayContactscon el encabezado:"Updated contact list:" - Mostrar estadísticas de contactos:
"=== CONTACT STATISTICS ===""Total contacts: [number_of_contacts]""Contacts added this session: 1"
- Mostrar el mensaje de finalización:
"Contact management operations completed successfully"
La función displayContacts debe imprimir cada contacto en el formato: "[index]. [name] - Phone: [phone], Email: [email]" donde el índice comienza desde 1.
Usa el paquete strings para dividir las cadenas de entrada y el paquete fmt para la salida formateada. Este desafío demuestra cómo combinar structs para la organización de datos, slices para colecciones y funciones para la organización del código, patrones fundamentales utilizados en toda la programación con Go.
Pruébalo tú mismo
package main
import (
"bufio"
"fmt"
"os"
"strings"
)
// TODO: Define tu estructura Contact aquí
// TODO: Implementa la función addContact aquí
// TODO: Implementa la función displayContacts aquí
func main() {
// Leer la entrada usando bufio.Scanner para manejar correctamente los espacios en los nombres
scanner := bufio.NewScanner(os.Stdin)
scanner.Scan()
contactsInput := scanner.Text()
scanner.Scan()
newContactInput := scanner.Text()
// TODO: Escribe tu código a continuación
// Analizar la entrada de contactos y crear estructuras Contact
// Recuerda verificar si el slice de partes tiene suficientes elementos antes de acceder
// Analizar la entrada del nuevo contacto
// Mostrar el encabezado de la aplicación
// Mostrar los contactos iniciales
// Añadir el nuevo contacto
// Mostrar los contactos actualizados
// Mostrar estadísticas
// Mostrar mensaje de finalización
}Todas las lecciones de Lógica y Flujo
1Flujo de control avanzado
Switch con `fallthrough`Salir de bucles anidadosContinuar un bucle específicoLa sentencia `goto`Repaso: Control de bucles avanzado4Proyecto: Lista de tareas sencilla
Configuración del proyectoAñadir una tarea2Estructuras y Métodos
Definición de métodos en estructurasReceptores de valorReceptores de punteroElegir receptoresMétodos vs FuncionesResumen - Comportamiento de estructuras5Mapas en profundidad
Mapas de StructsPunteros como valores de MapVerificación de Maps NilComparación de MapsResumen - Contador de frecuencia de palabras3Interfaces (Conceptos básicos)
¿Qué es una interfaz?Definir una interfazImplementar una interfazUso de tipos de interfazInterfaz vacíaAserciones de tipoType SwitchResumen: Formas y comportamientos