Maison> développement back-end> Golang> le corps du texte

Comment puis-je obtenir l'entrée lors de la sortie ?

WBOY
Libérer: 2024-02-09 12:30:19
avant
596 Les gens l'ont consulté

Comment puis-je obtenir lentrée lors de la sortie ?

Éditeur PHP Apple vous présentera aujourd'hui une question courante : en PHP, lorsque nous avons besoin d'obtenir une entrée de l'utilisateur, comment devons-nous la générer ? L'obtention des commentaires de l'utilisateur est une partie importante de l'écriture de programmes interactifs, il est donc important de maîtriser la bonne méthode. En PHP, nous pouvons utiliser certaines fonctions intégrées pour obtenir les entrées de l'utilisateur, comme utiliser la fonction `fgets()` pour lire une ligne d'entrée utilisateur à partir de l'entrée standard, ou utiliser la fonction `fgetc()` pour lire depuis l'entrée standard Prendre un caractère. Bien entendu, nous pouvons également utiliser les variables superglobales `$_GET` ou `$_POST` pour obtenir les données soumises par l'utilisateur via le formulaire. Quelle que soit la méthode utilisée, vous devez faire attention à la validation et au filtrage nécessaires des entrées utilisateur pour garantir la sécurité et la stabilité du programme. J'espère que l'introduction ci-dessus pourra aider tout le monde !

Contenu de la question

Ce que je souhaite implémenter, c'est une sorte d'application qui enregistre beaucoup d'informations sur la console (par exemple, un nombre de 0 à 1000000000000) et est capable d'arrêter l'exécution en tapant une commande dans la console (par exemple "arrêter").

J'ai eu l'idée d'utiliser goroutine, cependant, je ne peux pas saisir la commande car le champ de saisie passe en sortie.

Voici mon code :

package main import ( "bufio" "os" ) var process bool = true func commandHandler() { reader := bufio.NewReader(os.Stdin) for process { text, _ := reader.ReadString('\n') if text == "stop\r\n" { process = false } } } func task() { var i int64 = 0 for ; i < 10000000000 || process; i++ { if i%30000000 == 0 { // Just to slow down an output for a while println(i) } } } func main() { go task() commandHandler() }
Copier après la connexion

Et les résultats que j'ai obtenus. Les lettres sont l'entrée que j'essaie de saisir et les chiffres sont la sortie de l'application

Des suggestions sur la façon d'effectuer des entrées/sorties appropriées dans mon application go ?

Solution

Je ne peux pas saisir la commande car le champ de saisie passe à la sortie

Vous pouvez saisir des commandes normalement. Au fur et à mesure que vous les tapez, ils sont répercutés sur votre console. Ceci sera combiné avec tout le reste envoyé à la console, ce qui peut dérouter l'utilisateur - mais pas l'ordinateur.

En supposant que cela correspond réellement à votre système d'exploitation, votre programme fonctionne très bien :

if text == "stop\r\n" {
Copier après la connexion

Pas sur mon système d'exploitationr。更便携的方法是使用strings.trimspaceSupprimez tous les espaces.

import ( ... "strings" ) ... ... if strings.TrimSpace(text) == "stop" {
Copier après la connexion

Avec ce changement, le code fonctionne pour moi. Comme vous l'avez dit, la sortie et l'entrée sont insérées dans l'écran, mais vous pouvez toujours taperstopet terminer le programme.

Des suggestions sur la façon d'effectuer des entrées/sorties appropriées dans mon application go ?

Presque aucun programme de terminal dans le monde réel n'est interactif. Au lieu de cela, les arguments de ligne de commande et les variables d'environnement fournissent sa configuration lorsqu'ils sont appelés. La redirection Shell est généralement utilisée pour conserver (dans un fichier) ou une page (par exemple|less) toute sortie longue d'un programme.

Vous voyez beaucoup de programmes académiques utilisant le modèle de terminal interactif, où le programme invite l'utilisateur et collecte des données, mais dans le monde réel, cela est très rare et constitue généralement une complication imprudente. L'entrée standard est généralement utilisée pour fournir l'entrée de données requise pour les calculs, plutôt que des commandes utilisateur (telles que des données à manipuler ou à filtrer).

Comme @tinkerer l'a suggéré, les signaux peuvent déjà être utilisés pour terminer votre programme (les détails sont spécifiques au système d'exploitation). Il n'y a donc vraiment pas lieu de s'inquiéter de la façon dont l'application du terminal gère la représentation visuelle des entrées et sorties standard, qui sont interpolées uniquement pour terminer le programme. Il existe de nombreux autres signaux dans l'environnement posix, dont certains sont entièrement destinés à l'utilisateur et peuvent être utilisés à n'importe quelle fin.

Une fois que le runtime nécessite une entrée utilisateur plus complexe, les programmes écoutent généralement les commandes sur un socket. Pour de tels programmes, les interfaces Web fournissant des services http sont de plus en plus courantes en raison de leur simplicité et de leur accessibilité.

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!

Étiquettes associées:
source:stackoverflow.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!