La lecture de Stdin dans GO par l'exemple
Utilisez fmt.scanf pour lire l'entrée formatée, adaptée aux données structurées simples, mais les chaînes sont coupées lors de la rencontre des espaces; 2. Il est recommandé d'utiliser Bufio.Scanner pour lire la ligne par ligne, prend en charge les entrées multi-lignes, la détection EOF et l'entrée du pipeline et peut gérer les erreurs de numérisation; 3. Utilisez io.readall (os.stdin) pour lire toutes les entrées à la fois, adapté au traitement de gros morceaux de données ou de flux de fichiers; 4. La réponse clé en temps réel nécessite des bibliothèques tierces telles que golang.org/x/term, et Bufio est suffisant pour les scénarios conventionnels; Suggestions pratiques: utilisez FMT.SCAN pour une entrée simple interactive, utilisez Bufio.Scanner pour une entrée de ligne ou un pipeline, utilisez IO.readall pour de gros morceaux de données et gérez toujours les erreurs pour éviter la défaillance du silence.
Dans GO, la lecture des données de l'entrée standard ( stdin
) est une exigence commune, telle que la lecture des données de l'entrée des utilisateurs ou du pipeline de traitement. Voici quelques méthodes communes et pratiques qui combinent le style de l' Go by Example
pour montrer comment lire le contenu de stdin
.

1. Lire l'entrée formatée à l'aide de fmt.Scanf
Convient pour la lecture d'entrées structurées, telles que des nombres uniques ou des chaînes.
package principal Importer "FMT" func main () { chaîne de nom var Var Age int fmt.print ("Entrez le nom et l'âge:") FMT.SCANF ("% S% D", & Name, & Age) fmt.printf ("Hello% s, vous avez% d des années. \ n", nom, âge) }
⚠️ Remarque:
Scanf
arrête de lire la chaîne lors de la rencontre des espaces, ce qui convient aux scénarios simples.
2. Utilisez bufio.Scanner
pour lire la ligne par ligne (recommandé)
Il s'agit de la méthode la plus couramment utilisée, adaptée à la lecture de plusieurs lignes d'entrée ou de traitement EOF
(telles que l'entrée du pipeline).
package principal importer ( "Bufio" "FMT" "OS" ) func main () { scanner: = bufio.newscanner (os.stdin) fmt.println ("Entrez du texte (ctrl d pour terminer):") pour scanner.scan () { Ligne: = Scanner.Text () si line == "exit" { casser } fmt.printf ("vous avez entré:% s \ n", ligne) } Si err: = Scanner.err (); err! = Nil { fmt.fprintln (os.stderr, "Lecture d'entrée standard:", err) } }
✅ PROS:
- Prend en charge la lecture par ligne
- Compatible avec les entrées du terminal et les pipelines (tels que
echo "hello" | go run main.go
)EOF
détectable (Ctrl D sur Unix, Ctrl Z sur Windows)
3. Lisez toutes les entrées à la fois (adaptées au traitement des fichiers ou de gros morceaux de données)
Lisez l'intégralité du contenu stdin
à l'aide de io.ReadAll
.
package principal importer ( "FMT" "Io" "OS" ) func main () { fmt.println ("Coller Content (Ctrl D To Finish):") données, err: = io.readall (os.stdin) Si err! = Nil { fmt.fprintln (os.stderr, "Erreur de lecture d'entrée:", err) Retour } fmt.printf ("lire% d octets: \ n% s", len (données), données) }
? Scénarios applicables:
- Traitez l'entrée complète de JSON, des fichiers de configuration, etc.
- Utiliser avec des pipelines, tels que
cat data.txt | go run main.go
4. Lire des caractères uniques ou une entrée non tamponnée
Si vous avez besoin de répondre aux clés en temps réel (comme des jeux ou des outils interactifs), vous pouvez utiliser les appels au niveau du système, mais la bibliothèque standard ne le prend pas directement. Vous pouvez utiliser des bibliothèques tierces telles que golang.org/x/term
.
Cependant, pour la lecture normale de STDIN, bufio
est suffisant.
Suggestions d'utilisation pratiques
- Entrée interactive : utilisez
fmt.Scan
oufmt.Scanf
pour obtenir rapidement des valeurs simples. - Entrée de ligne ou traitement du pipeline : utilisez d'abord
bufio.Scanner
. - Grands morceaux de données ou de flux de fichiers : utilisez
io.ReadAll(os.Stdin)
. - N'oubliez pas de gérer
scanner.Err()
eterror
pour éviter la défaillance du silence.
Fondamentalement, ces manières courantes. La bibliothèque standard de Go est simple et efficace et peut facilement gérer la plupart des scénarios d'entrée avec os.Stdin
.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Outils d'IA chauds

Undress AI Tool
Images de déshabillage gratuites

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Clothoff.io
Dissolvant de vêtements AI

Video Face Swap
Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds

Le chargement paresseux uniquement les requêtes lors de l'accès aux associations peut facilement entraîner des problèmes n 1, ce qui convient aux scénarios où les données associées ne sont pas déterminées si elles sont nécessaires; 2. Utilisations de chargement d'urgence avec () pour charger les données associées à l'avance pour éviter N 1 requêtes, ce qui convient aux scénarios de traitement par lots; 3. Le chargement d'urgence doit être utilisé pour optimiser les performances, et n 1 des problèmes peuvent être détectés via des outils tels que Laraveldebugbar, et le $ avec l'attribut du modèle est soigneusement utilisé pour éviter les frais généraux de performances inutiles.

UseArestapitobridgePhpandmlModelsByrunningTheModelinpythonviaflaskorfastapiandCallingitfrompsingCurlorBuzzle.2.Runpythonscripts est ventilateur

Laravel prend en charge l'utilisation des requêtes SQL natives, mais la liaison des paramètres doit être préférée pour assurer la sécurité; 1. Utilisez DB :: SELECT () pour exécuter SELECT Queries avec la liaison des paramètres pour empêcher l'injection SQL; 2. Utilisez DB :: Update () pour effectuer des opérations de mise à jour et renvoyer le nombre de lignes affectées; 3. Utilisez db :: insert () pour insérer des données; 4. Utilisez DB :: Delete () pour supprimer les données; 5. Utilisez DB :: Instruction () pour exécuter des instructions SQL sans ensembles de résultats tels que Create, Alter, etc.; 6. Il est recommandé d'utiliser Whereraw, Selectraw et d'autres méthodes dans QueryBuilder pour combiner les expressions natives pour améliorer la sécurité

Utilisation d'EfficientDatastructuresLikeArrayListOverLinkedListandPrimiteCollectionSoreduceoverhead; 2.MinimizeObjectCreationByReusingObjects, usingStringBuilderForCatenation, andcachingExpensiveBjects; 3.PreventMemoryleakSbyNulfultingStor

L'opérateur ternaire de Python est utilisé pour implémenter de manière concise le jugement if-else, et sa syntaxe est "Value_IF_Trueif conditionelsevalue_if_false"; 1. Il peut être utilisé pour une affectation simple, comme le renvoi de la chaîne correspondante en fonction des valeurs positives et négatives; 2. Il peut éviter les erreurs de division, telles que déterminer que le dénominateur n'est pas nulle puis de division; 3. Il peut sélectionner le contenu en fonction des conditions au format de chaîne; 4. Il peut attribuer des étiquettes à différents éléments dans la formule de dérivation de liste; Il convient de noter que cet opérateur ne convient qu'aux branches binaires et ne doit pas être imbriqué plusieurs couches. La logique complexe doit utiliser la structure traditionnelle IF-Elif-Else pour assurer la lisibilité.

La programmation réactive met en œuvre des services de non-blocage à faible latence et à faible latence en Java via Projectaactor et SpringWebflux. 1. ProjectAacteur fournit deux types de noyaux: mono et flux, prend en charge le traitement déclaratif des flux de données asynchrones et convertis, filtres et autres opérations via des chaînes d'opérateurs; 2. SpringWebflux est construit sur Reactor, prend en charge deux modèles de programmation: l'annotation et fonctionnelle. Il fonctionne sur des serveurs non bloquants tels que Netty et peut gérer efficacement un grand nombre de connexions simultanées; 3. L'utilisation du réacteur WebFlux peut améliorer la capacité de concurrence et l'utilisation des ressources dans les scénarios à forte intensité d'E / S et prend naturellement SSE et WebSO.

Table-Layout: Fixe obligera la largeur de la colonne de table à déterminer par la largeur de la cellule de la première ligne pour éviter le contenu affectant la disposition. 1. Définissez la table de table: fixe et spécifiez la largeur du tableau; 2. Définissez le rapport de largeur de colonne spécifique pour la première ligne th / td; 3. Utilisez White-Space: Nowrap, débordement: Hidden et Text-Overflow: EllipSis pour contrôler le débordement du texte; 4. Applicable à la gestion des antécédents, aux rapports de données et à d'autres scénarios qui nécessitent une disposition stable et un rendu haute performance, qui peuvent effectivement empêcher la gigue de mise en page et améliorer l'efficacité du rendu.

Utilisez un groupe de capture d'expression régulière dans le bloc-notes pour réorganiser efficacement le texte. Tout d'abord, vous devez ouvrir la boîte de dialogue de remplacement (CTRL H), sélectionner "Mode de recherche" comme "expression régulière", 1. Utiliser () pour définir le groupe de capture, tel que (\ w) pour capturer les mots; 2. Utilisez \ 1 et \ 2 pour référencer le groupe correspondant dans la zone de remplacement; 3. Exemple: Échangez le nom "JohnDoe" comme "Doe, John", Find (\ W) \ S (\ W), le remplacez par \ 2, \ 1; 4. Conversion du format de date 2023-12-25 au 25/12/2023, find (\ d {4}) - (\ d {2}) - (\ d {2}), remplacez-le par \ 3 / \ 2 / \ 1; 5. La réorganisation du journal peut extraire le temps, le niveau, l'identification et d'autres informations
