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 calculatorAll'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.
Sfida
FacileCrea 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 è:
- Crea un pacchetto
mathutilsdichiarandopackage mathutilsall'inizio - Analizza il primo input suddividendolo in corrispondenza delle barre verticali (
|) per ottenere le singole definizioni di funzione - Per ogni definizione di funzione, suddividila in corrispondenza dei due punti per ottenere il nome della funzione, i parametri e il tipo di operazione
- Crea le seguenti funzioni esportate nel tuo pacchetto
mathutils:Add(a, b int) int- restituisce la somma di a e bSubtract(a, b int) int- restituisce a meno bMultiply(a, b int) int- restituisce il prodotto di a e bDivide(a, b int) int- restituisce a diviso per b (divisione intera)
- Nel tuo programma principale, importa il pacchetto
mathutils - Visualizza l'intestazione delle informazioni sul pacchetto:
"=== MATHUTILS PACKAGE DEMO ===" - 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"
- Analizza il secondo input suddividendolo in corrispondenza delle barre verticali per ottenere le singole richieste di calcolo
- Per ogni richiesta di calcolo, suddividila in corrispondenza dei due punti per ottenere il nome della funzione e i parametri
- Suddividi i parametri in corrispondenza delle virgole per ottenere i due valori interi
- Converti le stringhe dei parametri in interi usando
strconv.Atoi - Visualizza l'intestazione del processo di calcolo:
"Performing calculations:" - Per ogni richiesta di calcolo:
- Chiama la funzione appropriata del pacchetto
mathutils - Visualizza:
"mathutils.[function_name]([param1], [param2]) = [result]"
- Chiama la funzione appropriata del pacchetto
- 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]"
- 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
}Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Tutte le lezioni di Logica e flusso
1Flusso di controllo avanzato
Switch con `fallthrough`Uscire dai cicli annidatiContinuare un ciclo specificoL'istruzione `goto`Riepilogo - Controllo avanzato dei cicli4Progetto: semplice lista di attività
Configurazione del progettoAggiungere un’attività2Struct e metodi
Definire metodi sugli structReceiver per valoreReceiver con puntatoreScegliere i receiverMetodi vs funzioniRiepilogo - comportamento degli struct5Mappe in dettaglio
Mappe di structPuntatori come valori delle mappeVerificare le mappe nilConfrontare le mappeRiepilogo - Contatore della frequenza delle parole3Interfacce (le basi)
Che cos’è un’interfaccia?Definire un’interfacciaImplementare un’interfacciaUsare i tipi interfacciaInterfaccia vuotaAsserzioni di tipoSwitch di tipoRiepilogo: forme e comportamenti6Gli insiemi in Go idiomatico
L'idioma degli insiemi in GoCreare un insiemeAggiungere elementi a un insiemeVerificare l'appartenenzaRimuovere elementi da un insiemeIterare su un insiemeRiepilogo - Nomi utente univoci9Pacchetti e ambito
Che cos’è un pacchetto?Esportato e non esportatoCreare un pacchetto sempliceAlias dei pacchettiL’identificatore vuoto `_`La funzione `init`Riepilogo: creare un’utilitàEsercitati da solo: Compilatore Go online