Créer un Package Simple
Fait partie de la section Logique & Flux du Journey GO de Coddy. Leçon 53 sur 68.
Il est maintenant temps de créer votre propre package personnalisé ! La création de packages vous permet d’organiser votre code en modules réutilisables qui peuvent être importés et utilisés dans différents programmes.
Pour créer un package, vous commencez par le déclarer en haut de votre fichier avec le mot-clé package suivi du nom du package. Pour notre package de calculatrice, nous utiliserons :
package calculatorDans ce package, vous pouvez définir des fonctions, des variables et des types. N’oubliez pas que seuls les identifiants exportés (ceux qui commencent par une lettre majuscule) seront accessibles depuis d’autres packages. Voici comment vous pourriez définir une fonction Add exportée :
package calculator
func Add(a, b int) int {
return a + b
}Pour utiliser votre package personnalisé depuis un autre fichier, vous l’importez comme n’importe quel autre package. Depuis votre package main, vous pouvez alors appeler les fonctions exportées :
package main
import "calculator"
func main() {
result := calculator.Add(5, 3)
}Cette approche modulaire rend votre code plus organisé et vous permet de réutiliser des fonctionnalités dans plusieurs programmes sans dupliquer le code.
Défi
FacileCréez un package personnalisé mathutils avec des opérations mathématiques de base, puis utilisez-le depuis votre programme principal. Ce défi testera votre capacité à créer un package, à définir des fonctions exportées et à importer votre package personnalisé pour l’utiliser dans un autre programme.
Vous recevrez deux entrées :
- Une chaîne contenant des définitions de fonctions au format
"function1:param1,param2:operation|function2:param1,param2:operation"(par exemple,"Add:5,3:addition|Multiply:4,7:multiplication|Subtract:10,4:subtraction") - Une chaîne contenant des demandes de calcul au format
"operation1:value1,value2|operation2:value1,value2|operation3:value1,value2"(par exemple,"Add:15,25|Multiply:6,8|Subtract:50,20")
Votre tâche consiste à :
- Créer un package
mathutilsen déclarantpackage mathutilsau début - Analyser la première entrée en la divisant au niveau des barres verticales (
|) pour obtenir les définitions de fonctions individuelles - Pour chaque définition de fonction, la diviser au niveau des deux-points afin d’obtenir le nom de la fonction, les paramètres et le type d’opération
- Créer les fonctions exportées suivantes dans votre package
mathutils:Add(a, b int) int- renvoie la somme de a et bSubtract(a, b int) int- renvoie a moins bMultiply(a, b int) int- renvoie le produit de a et bDivide(a, b int) int- renvoie a divisé par b (division entière)
- Dans votre programme principal, importer le package
mathutils - Afficher l’en-tête d’informations du package :
"=== MATHUTILS PACKAGE DEMO ===" - Analyser la première entrée et afficher les fonctions disponibles :
"Available functions in mathutils package:"- Pour chaque fonction :
"- [function_name]: Performs [operation_type] on two integers"
- Analyser la deuxième entrée en la divisant au niveau des barres verticales pour obtenir les demandes de calcul individuelles
- Pour chaque demande de calcul, la diviser au niveau des deux-points afin d’obtenir le nom de la fonction et les paramètres
- Diviser les paramètres au niveau des virgules afin d’obtenir les deux valeurs entières
- Convertir les chaînes de paramètres en entiers à l’aide de
strconv.Atoi - Afficher l’en-tête du processus de calcul :
"Performing calculations:" - Pour chaque demande de calcul :
- Appeler la fonction appropriée du package
mathutils - Afficher :
"mathutils.[function_name]([param1], [param2]) = [result]"
- Appeler la fonction appropriée du package
- Calculer et afficher les statistiques récapitulatives :
"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]"
- Afficher la confirmation d’utilisation du package :
"Package demonstration completed successfully""All functions from mathutils package executed correctly"
Utilisez le package strings pour diviser les chaînes d’entrée, le package strconv pour convertir les chaînes en entiers et le package fmt pour produire une sortie formatée. N’oubliez pas que seules les fonctions commençant par des lettres majuscules seront exportées et accessibles depuis d’autres packages.
Important : Les deux lignes d’entrée utilisent des barres verticales (|) comme délimiteur entre les entrées. Chaque entrée de la première ligne suit le format FunctionName:param1,param2:operationtype : divisez d’abord au niveau de |, puis divisez chaque entrée au niveau de : afin d’extraire le nom de la fonction (index 0) et le type d’opération (index 2).
Ce défi montre comment créer du code réutilisable grâce à des packages personnalisés et comment organiser les fonctionnalités en modules logiques.
Essayez vous-même
package main
import (
"bufio"
"fmt"
"os"
"strconv"
"strings"
)
// TODO: Create your mathutils package functions here
// Puisque nous ne pouvons pas utiliser de fichiers séparés, définissez les fonctions directement
// Celles-ci se trouveraient normalement dans un fichier de package séparé
func main() {
// Lire l'entrée à l'aide de bufio.Scanner pour gérer correctement les espaces
scanner := bufio.NewScanner(os.Stdin)
scanner.Scan()
functionDefs := scanner.Text()
scanner.Scan()
calcRequests := scanner.Text()
// TODO: Écrivez votre code ci-dessous
// 1. Define Add, Subtract, Multiply, Divide functions (simulating mathutils package)
// 2. Analyser functionDefs : diviser par '|' pour obtenir chaque définition, puis diviser chacune par ':'
// Format : FuncName:param1,param2:operation (p. ex. "Add:5,3:addition")
// 3. Display package information and available functions
// 4. Parse calcRequests (split by '|'), perform calculations
// 5. Afficher les résultats et les statistiques récapitulatives
// Supprimer les avertissements de variables non utilisées
_ = functionDefs
_ = calcRequests
_ = fmt.Sprintf
_ = strconv.Atoi
_ = strings.Split
// N'oubliez pas de produire le format requis tel que spécifié dans le défi
}Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
Toutes les leçons de Logique & Flux
1Structures de contrôle avancées
Switch avec `fallthrough`Sortir de boucles imbriquéesContinuer une boucle spécifiqueL'instruction `goto`Récapitulatif - Contrôle de boucle avancé4Projet : Liste de tâches simple
Configuration du projetAjouter une tâche2Structures et Méthodes
Définir des méthodes sur des structuresReceveurs par valeurReceveurs par pointeurChoisir les receveursMéthodes vs FonctionsRécapitulatif - Comportement des structures5Les Maps en profondeur
Maps de StructsPointeurs comme valeurs de MapTester les Maps NilComparer des MapsRécapitulatif - Compteur de fréquence de mots3Interfaces (Les bases)
Qu'est-ce qu'une Interface ?Définir une InterfaceImplémenter une InterfaceUtiliser les types d'InterfaceInterface videAssertions de typeType SwitchRécapitulatif - Formes et comportements6Go idiomatique : Les ensembles
L'idiome des ensembles en GoCréer un ensembleAjouter à un ensembleVérifier l'appartenanceSupprimer d'un ensembleItérer sur un ensembleRécapitulatif - Noms d'utilisateur uniques9Packages et Portée
Qu'est-ce qu'un Package ?Exporté vs Non-exportéCréer un Package SimpleAliasing de PackageL'identificateur blanc `_`La fonction `init`Récapitulatif - Créer un utilitaireEntraînez-vous par vous-même : Compilateur Go en ligne