Menu
Coddy logo textTech

Creare un pacchetto semplice

Fa parte della sezione Logica e flusso del percorso GO di Coddy. Lezione 53 di 68.

Ora è il momento di creare il tuo pacchetto personalizzato! Creare pacchetti ti permette di organizzare il codice in moduli riutilizzabili che possono essere importati e usati in programmi diversi.

Per creare un pacchetto, inizia dichiarandolo all'inizio del file con la parola chiave package seguita dal nome del pacchetto. Per il nostro pacchetto calcolatrice, useremo:

package calculator

All'interno di questo pacchetto puoi definire funzioni, variabili e tipi. Ricorda che solo gli identificatori esportati (quelli che iniziano con una lettera maiuscola) saranno accessibili da altri pacchetti. Ecco come potresti definire una funzione Add esportata:

package calculator

func Add(a, b int) int {
    return a + b
}

Per usare il tuo pacchetto personalizzato da un altro file, lo importi proprio come qualsiasi altro pacchetto. Dal tuo pacchetto main, puoi quindi chiamare le funzioni esportate:

package main

import "calculator"

func main() {
    result := calculator.Add(5, 3)
}

Questo approccio modulare rende il tuo codice più organizzato e ti permette di riutilizzare le funzionalità in più programmi senza duplicare il codice.

challenge icon

Sfida

Facile

Crea un pacchetto personalizzato mathutils con operazioni matematiche di base, quindi utilizzalo dal tuo programma principale. Questa sfida metterà alla prova la tua capacità di creare un pacchetto, definire funzioni esportate e importare il tuo pacchetto personalizzato per utilizzarlo in un altro programma.

Riceverai due input:

  • Una stringa contenente definizioni di funzioni nel formato "function1:param1,param2:operation|function2:param1,param2:operation" (ad es., "Add:5,3:addition|Multiply:4,7:multiplication|Subtract:10,4:subtraction")
  • Una stringa contenente richieste di calcolo nel formato "operation1:value1,value2|operation2:value1,value2|operation3:value1,value2" (ad es., "Add:15,25|Multiply:6,8|Subtract:50,20")

Il tuo compito è:

  1. Crea un pacchetto mathutils dichiarando package mathutils all'inizio
  2. Analizza il primo input suddividendolo in corrispondenza delle barre verticali (|) per ottenere le singole definizioni di funzione
  3. Per ogni definizione di funzione, suddividila in corrispondenza dei due punti per ottenere il nome della funzione, i parametri e il tipo di operazione
  4. Crea le seguenti funzioni esportate nel tuo pacchetto mathutils:
    • Add(a, b int) int - restituisce la somma di a e b
    • Subtract(a, b int) int - restituisce a meno b
    • Multiply(a, b int) int - restituisce il prodotto di a e b
    • Divide(a, b int) int - restituisce a diviso per b (divisione intera)
  5. Nel tuo programma principale, importa il pacchetto mathutils
  6. Visualizza l'intestazione delle informazioni sul pacchetto: "=== MATHUTILS PACKAGE DEMO ==="
  7. Analizza il primo input e visualizza le funzioni disponibili:
    • "Available functions in mathutils package:"
    • Per ogni funzione: "- [function_name]: Performs [operation_type] on two integers"
  8. Analizza il secondo input suddividendolo in corrispondenza delle barre verticali per ottenere le singole richieste di calcolo
  9. Per ogni richiesta di calcolo, suddividila in corrispondenza dei due punti per ottenere il nome della funzione e i parametri
  10. Suddividi i parametri in corrispondenza delle virgole per ottenere i due valori interi
  11. Converti le stringhe dei parametri in interi usando strconv.Atoi
  12. Visualizza l'intestazione del processo di calcolo: "Performing calculations:"
  13. Per ogni richiesta di calcolo:
    • Chiama la funzione appropriata del pacchetto mathutils
    • Visualizza: "mathutils.[function_name]([param1], [param2]) = [result]"
  14. Calcola e visualizza le statistiche riepilogative:
    • "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]"
  15. Visualizza la conferma dell'utilizzo del pacchetto:
    • "Package demonstration completed successfully"
    • "All functions from mathutils package executed correctly"

Usa il pacchetto strings per suddividere le stringhe di input, il pacchetto strconv per convertire le stringhe in interi e il pacchetto fmt per l'output formattato. Ricorda che solo le funzioni che iniziano con una lettera maiuscola verranno esportate e saranno accessibili da altri pacchetti.

Importante: Entrambe le righe di input usano le barre verticali (|) come delimitatore tra le voci. Ogni voce del primo input ha il formato FunctionName:param1,param2:operationtype: suddividi prima in corrispondenza di |, quindi suddividi ogni voce in corrispondenza di : per estrarre il nome della funzione (indice 0) e il tipo di operazione (indice 2).

Questa sfida illustra come creare codice riutilizzabile tramite pacchetti personalizzati e come organizzare le funzionalità in moduli logici.

Provalo tu

package main

import (
	"bufio"
	"fmt"
	"os"
	"strconv"
	"strings"
)

// TODO: Crea qui le funzioni del pacchetto mathutils
// Poiché non possiamo usare file separati, definisci direttamente le funzioni
// Normalmente queste si troverebbero in un file separato del pacchetto

func main() {
	// Leggi l'input usando bufio.Scanner per gestire correttamente gli spazi
	scanner := bufio.NewScanner(os.Stdin)

	scanner.Scan()
	functionDefs := scanner.Text()

	scanner.Scan()
	calcRequests := scanner.Text()

	// TODO: Scrivi il tuo codice qui sotto
	// 1. Definisci le funzioni Add, Subtract, Multiply, Divide (simulando il pacchetto mathutils)
	// 2. Analizza functionDefs: suddividi in base a '|' per ottenere ogni definizione, poi suddividi ciascuna in base a ':'
	//    Formato: FuncName:param1,param2:operation  (ad es. "Add:5,3:addition")
	// 3. Mostra le informazioni sul pacchetto e le funzioni disponibili
	// 4. Analizza calcRequests (suddividi in base a '|'), esegui i calcoli
	// 5. Mostra i risultati e le statistiche riepilogative

	// Evita gli avvisi relativi alle variabili non utilizzate
	_ = functionDefs
	_ = calcRequests
	_ = fmt.Sprintf
	_ = strconv.Atoi
	_ = strings.Split

	// Ricorda di produrre l'output nel formato richiesto, come specificato nella sfida
}
quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Logica e flusso

Esercitati da solo: Compilatore Go online