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 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 sur les virgules afin d'obtenir les spécifications individuelles des fonctions
- Pour chaque spécification de fonction, la diviser sur les deux-points afin d'obtenir le nom et la description de la fonction
- Implémenter les fonctions exportées suivantes dans votre package
stringutil:Reverse(s string) string- renvoie la chaîne avec les caractères dans l'ordre inverseToUpper(s string) string- renvoie la chaîne convertie en majusculesToLower(s string) string- renvoie la chaîne convertie en minusculesLength(s string) int- renvoie 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 sur les barres verticales afin d'obtenir les chaînes de test individuelles
- Afficher l'en-tête des tests :
"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 les chaînes les 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, ainsi que le package fmt pour produire une sortie formatée. Pour la fonction Reverse, vous devrez convertir la chaîne en une tranche de runes, inverser l'ordre, puis reconvertir le tout en chaîne. N'oubliez pas que toutes les fonctions exportées doivent commencer par une majuscule pour être accessibles depuis d'autres packages. Ce défi montre comment créer des packages utilitaires réutilisables et organiser des fonctionnalités connexes au même endroit.
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 utilitaireEntraînez-vous par vous-même : Compilateur Go en ligne