Crear un paquete simple
Parte de la sección Lógica y Flujo del Journey de GO de Coddy — lección 53 de 68.
¡Ahora es el momento de crear tu propio paquete personalizado! Crear paquetes te permite organizar tu código en módulos reutilizables que pueden ser importados y utilizados en diferentes programas.
Para crear un paquete, comienzas declarándolo en la parte superior de tu archivo con la palabra clave package seguida del nombre del paquete. Para nuestro paquete de calculadora, usaremos:
package calculatorDentro de este paquete, puedes definir funciones, variables y tipos. Recuerda que solo los identificadores exportados (aquellos que comienzan con una letra mayúscula) serán accesibles desde otros paquetes. Aquí tienes cómo podrías definir una función Add exportada:
package calculator
func Add(a, b int) int {
return a + b
}Para usar tu paquete personalizado desde otro archivo, lo importas igual que cualquier otro paquete. Desde tu paquete main, puedes llamar a las funciones exportadas:
package main
import "calculator"
func main() {
result := calculator.Add(5, 3)
}Este enfoque modular hace que tu código esté más organizado y te permite reutilizar la funcionalidad en múltiples programas sin duplicar código.
Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Desafío
FácilCrea un paquete personalizado mathutils con operaciones matemáticas básicas y luego úsalo desde tu programa principal. Este desafío pondrá a prueba tu capacidad para crear un paquete, definir funciones exportadas e importar tu paquete personalizado para usarlo en otro programa.
Recibirás dos entradas:
- Una cadena que contiene definiciones de funciones en el formato
"function1:param1,param2:operation|function2:param1,param2:operation"(por ejemplo,"Add:5,3:addition|Multiply:4,7:multiplication|Subtract:10,4:subtraction") - Una cadena que contiene solicitudes de cálculo en el formato
"operation1:value1,value2|operation2:value1,value2|operation3:value1,value2"(por ejemplo,"Add:15,25|Multiply:6,8|Subtract:50,20")
Tu tarea es:
- Crear un paquete
mathutilsdeclarandopackage mathutilsen la parte superior - Analizar la primera entrada dividiéndola por tuberías (
|) para obtener las definiciones de funciones individuales - Para cada definición de función, dividir por dos puntos para obtener el nombre de la función, los parámetros y el tipo de operación
- Crear las siguientes funciones exportadas en tu paquete
mathutils:Add(a, b int) int- devuelve la suma de a y bSubtract(a, b int) int- devuelve a menos bMultiply(a, b int) int- devuelve el producto de a y bDivide(a, b int) int- devuelve a dividido por b (división entera)
- En tu programa principal, importar el paquete
mathutils - Mostrar el encabezado de información del paquete:
"=== MATHUTILS PACKAGE DEMO ===" - Analizar la primera entrada y mostrar las funciones disponibles:
"Available functions in mathutils package:"- Para cada función:
"- [function_name]: Performs [operation_type] on two integers"
- Analizar la segunda entrada dividiéndola por tuberías para obtener las solicitudes de cálculo individuales
- Para cada solicitud de cálculo, dividir por dos puntos para obtener el nombre de la función y los parámetros
- Dividir los parámetros por comas para obtener los dos valores enteros
- Convertir las cadenas de parámetros a enteros usando
strconv.Atoi - Mostrar el encabezado del proceso de cálculo:
"Performing calculations:" - Para cada solicitud de cálculo:
- Llamar a la función apropiada del paquete
mathutils - Mostrar:
"mathutils.[function_name]([param1], [param2]) = [result]"
- Llamar a la función apropiada del paquete
- Calcular y mostrar estadísticas de resumen:
"Calculation Summary:""Total calculations performed: [number_of_calculations]""Functions used: [comma_separated_list_of_unique_function_names_used]""Sum of all results: [sum_of_all_calculation_results]"
- Mostrar la confirmación de uso del paquete:
"Package demonstration completed successfully""All functions from mathutils package executed correctly"
Usa el paquete strings para dividir las cadenas de entrada, el paquete strconv para convertir cadenas a enteros y el paquete fmt para la salida formateada. Recuerda que solo las funciones que comienzan con letras mayúsculas serán exportadas y accesibles desde otros paquetes.
Importante: Ambas líneas de entrada usan tuberías (|) como delimitador entre entradas. Cada entrada en la primera entrada tiene el formato FunctionName:param1,param2:operationtype — divide primero por |, luego divide cada entrada por : para extraer el nombre de la función (índice 0) y el tipo de operación (índice 2).
Este desafío demuestra cómo crear código reutilizable a través de paquetes personalizados y cómo organizar la funcionalidad en módulos lógicos.
Hoja de referencia
Para crear un paquete personalizado, declárelo en la parte superior de su archivo con la palabra clave package:
package calculatorSolo los identificadores exportados (que comienzan con una letra mayúscula) son accesibles desde otros paquetes:
package calculator
func Add(a, b int) int {
return a + b
}Importe y use su paquete personalizado desde otro archivo:
package main
import "calculator"
func main() {
result := calculator.Add(5, 3)
}Este enfoque modular organiza el código y permite la reutilización en múltiples programas sin duplicar el código.
Pruébalo tú mismo
package main
import (
"bufio"
"fmt"
"os"
"strconv"
"strings"
)
// TODO: Crea las funciones de tu paquete mathutils aquí
// Dado que no podemos usar archivos separados, define las funciones directamente
// Normalmente estas estarían en un archivo de paquete separado
func main() {
// Leer la entrada usando bufio.Scanner para manejar los espacios correctamente
scanner := bufio.NewScanner(os.Stdin)
scanner.Scan()
functionDefs := scanner.Text()
scanner.Scan()
calcRequests := scanner.Text()
// TODO: Escribe tu código a continuación
// 1. Define las funciones Add, Subtract, Multiply, Divide (simulando el paquete mathutils)
// 2. Analiza functionDefs: divide por '|' para obtener cada definición, luego divide cada una por ':'
// Formato: FuncName:param1,param2:operation (ej. "Add:5,3:addition")
// 3. Muestra la información del paquete y las funciones disponibles
// 4. Analiza calcRequests (divide por '|'), realiza los cálculos
// 5. Muestra los resultados y las estadísticas de resumen
// Suprimir advertencias de variables no utilizadas
_ = functionDefs
_ = calcRequests
_ = fmt.Sprintf
_ = strconv.Atoi
_ = strings.Split
// Recuerda imprimir el formato requerido según se especifica en el desafío
}Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
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 comportamientos6Go idiomático: Sets
El modismo de Set en GoCrear un SetAñadir a un SetComprobar pertenenciaEliminar de un SetIterar sobre un SetResumen: Nombres de usuario únicos9Paquetes y Ámbito
¿Qué es un paquete?Exportado vs. No exportadoCrear un paquete simpleAlias de paquetesEl identificador en blanco `_`La función `init`Repaso - Construir una utilidad