Récapitulatif - Créer un utilitaire
Fait partie de la section Logique & Flux du Journey GO de Coddy — leçon 57 sur 68.
Défi
FacileCréez un package stringutil complet avec des fonctions de manipulation de chaînes de caractères et démontrez son utilisation dans un programme principal. Ce défi testera votre capacité à créer un package utilitaire personnalisé, à implémenter des fonctions exportées et à utiliser votre package depuis un autre programme.
Vous recevrez deux entrées :
- Une chaîne contenant les spécifications des fonctions au format
"function1:description1,function2:description2"(par exemple,"Reverse:reverses a string,ToUpper:converts to uppercase,ToLower:converts to lowercase") - Une chaîne contenant des chaînes de test séparées par des barres verticales au format
"string1|string2|string3"(par exemple,"hello|Go Programming|WORLD")
Votre tâche consiste à :
- Créer un package
stringutilen déclarantpackage stringutil - Analyser la première entrée en la divisant par les virgules pour obtenir les spécifications individuelles des fonctions
- Pour chaque spécification de fonction, diviser par les deux-points pour obtenir le nom de la fonction et sa description
- Implémenter les fonctions exportées suivantes dans votre package
stringutil:Reverse(s string) string- retourne la chaîne avec les caractères dans l'ordre inverseToUpper(s string) string- retourne la chaîne convertie en majusculesToLower(s string) string- retourne la chaîne convertie en minusculesLength(s string) int- retourne la longueur de la chaîne
- Dans votre programme principal, importer le package
stringutil - Afficher l'en-tête du package :
"=== STRINGUTIL PACKAGE DEMONSTRATION ===" - Afficher les fonctions disponibles :
"Available functions in stringutil package:"- Pour chaque fonction de la première entrée :
"- [function_name]: [description]"
- Analyser la deuxième entrée en la divisant par les barres verticales pour obtenir les chaînes de test individuelles
- Afficher l'en-tête de test :
"Testing stringutil functions:" - Pour chaque chaîne de test, démontrer toutes les fonctions :
"Testing with: \"[test_string]\""" stringutil.Reverse: \"[reversed_result]\""" stringutil.ToUpper: \"[uppercase_result]\""" stringutil.ToLower: \"[lowercase_result]\""" stringutil.Length: [length_result]"
- Calculer et afficher les statistiques :
"=== STATISTICS ===""Total test strings processed: [number_of_test_strings]""Functions available in package: [number_of_functions_from_first_input]""Total function calls made: [total_function_calls]"
- Afficher la chaîne la plus longue et la plus courte :
"Longest string: \"[longest_string]\" (length: [length])""Shortest string: \"[shortest_string]\" (length: [length])"
- Afficher le message de fin :
"Package demonstration completed successfully"
Utilisez le package strings pour diviser les chaînes d'entrée et manipuler le texte, et le package fmt pour la sortie formatée. Pour la fonction Reverse, vous devrez convertir la chaîne en une tranche (slice) de runes, inverser l'ordre, puis la reconvertir en chaîne. N'oubliez pas que toutes les fonctions exportées doivent commencer par une lettre majuscule pour être accessibles depuis d'autres packages. Ce défi démontre comment créer des packages utilitaires réutilisables et organiser des fonctionnalités liées entre elles.
Essayez vous-même
package main
import (
"bufio"
"fmt"
"os"
"strings"
)
// TODO: Créez vos fonctions du package stringutil ici
// Puisque nous ne pouvons pas utiliser de fichiers séparés, définissez les fonctions directement
// Celles-ci seraient normalement dans un fichier de package séparé
// func Reverse(s string) string {
// // Convertir en runes, inverser, reconvertir en chaîne
// }
// func ToUpper(s string) string {
// // Utiliser strings.ToUpper
// }
// func ToLower(s string) string {
// // Utiliser strings.ToLower
// }
// func Length(s string) int {
// // Retourner len(s)
// }
func main() {
// Lire l'entrée en utilisant bufio.Scanner pour gérer correctement les espaces
scanner := bufio.NewScanner(os.Stdin)
scanner.Scan()
functionSpecs := scanner.Text()
scanner.Scan()
testStrings := scanner.Text()
// Analyser les spécifications des fonctions
funcList := strings.Split(functionSpecs, ",")
// Analyser les chaînes de test
testList := strings.Split(testStrings, "|")
// TODO: Écrivez votre code ci-dessous
// 1. Afficher l'en-tête du package
// 2. Afficher les fonctions disponibles à partir de funcList (vérifier la longueur du tableau)
// 3. Tester toutes les fonctions avec chaque chaîne de test
// 4. Calculer et afficher les statistiques
// 5. Trouver et afficher les chaînes les plus longues/courtes (vérifier si testList contient des éléments)
// 6. Afficher le message de fin
// N'oubliez pas d'utiliser vos fonctions du package stringutil comme :
// Reverse(testString)
// ToUpper(testString)
// ToLower(testString)
// Length(testString)
}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 utilitaire