Table of Contents
Question content
Workaround
Home Backend Development Golang How to get input while outputting?

How to get input while outputting?

Feb 09, 2024 pm 12:30 PM
form submission

How to get input while outputting?

php editor Apple will introduce you to a common question today: In PHP, when we need to obtain user input, how should we output it? Obtaining user input is an important part of writing interactive programs, so it is important to master the correct method. In PHP, we can use some built-in functions to obtain user input, such as using the `fgets()` function to read a line of user input from the standard input, or using the `fgetc()` function to read from the standard input Take a character. Of course, we can also use the `$_GET` or `$_POST` superglobal variables to obtain the data submitted by the user through the form. No matter which method is used, you need to pay attention to the necessary validation and filtering of user input to ensure the security and stability of the program. I hope the above introduction can help everyone!

Question content

What I want to achieve is some kind of application that logs a large amount of information to the console (for example, a number from 0 to 1000000000000) and is able to pass in the console Type a command to stop execution (such as "stop").

I came up with the idea of ​​using goroutine, however, I cannot enter the command because the input field is changing to output.

This is my 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()
}
Copy after login

and the results I get. The letters are the input I'm trying to enter and the numbers are the output from the application

Any suggestions on how to do proper input/output in my go application?

Workaround

I cannot enter the command because the input field is changing to output

You can enter commands normally. As you type them, they are echoed to your console. This will be combined with everything else output to the console, which may confuse the user - but not the computer.

Assuming this actually matches your operating system, your program runs just fine:

if text == "stop\r\n" {
Copy after login

Not available on my operating system \r. A more portable way is to use strings.trimspace to remove all spaces.

import (
  ...
  "strings"
) 
... 
...
        if strings.TrimSpace(text) == "stop" {
Copy after login

With this change, the code works for me. As you said, the output and input are inserted to the screen, but you can still type stop and end the program.

Any suggestions on how to do proper input/output in my go application?

Almost no terminal programs in the real world are interactive. Instead, command line arguments and environment variables provide its configuration when called. Shell redirection is typically used to preserve (in a file) or page (e.g. |less) any long output from a program.

You'll see a lot of academic programming using the interactive terminal model, where the program prompts the user and collects data, but in the real world this is very rare and often an unwise complication. Standard input is typically used to provide data input required for calculations, rather than user commands (such as data to be manipulated or filtered).

As @tinkerer suggested, signals can already be used to terminate your program (details are operating system specific). So there's really no need to worry about how the terminal application handles the visual representation of standard input and output, which are interpolated just to terminate the program. There are many other signals in the posix environment, some of which are entirely user-facing and can be used for any purpose.

Once the runtime requires more complex user input, the program will typically listen for commands on a socket. For such programs, web interfaces providing http services are becoming more and more common due to simplicity and accessibility.

The above is the detailed content of How to get input while outputting?. For more information, please follow other related articles on the PHP Chinese website!

Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

AI Hentai Generator

AI Hentai Generator

Generate AI Hentai for free.

Hot Article

R.E.P.O. Energy Crystals Explained and What They Do (Yellow Crystal)
3 weeks ago By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Best Graphic Settings
3 weeks ago By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. How to Fix Audio if You Can't Hear Anyone
3 weeks ago By 尊渡假赌尊渡假赌尊渡假赌

Hot Tools

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

How to get form data in layui How to get form data in layui Apr 04, 2024 am 03:39 AM

layui provides a variety of methods for obtaining form data, including directly obtaining all field data of the form, obtaining the value of a single form element, using the formAPI.getVal() method to obtain the specified field value, serializing the form data and using it as an AJAX request parameter, and listening Form submission event gets data.

How to set up jump on layui login page How to set up jump on layui login page Apr 04, 2024 am 03:12 AM

Layui login page jump setting steps: Add jump code: Add judgment in the login form submit button click event, and jump to the specified page through window.location.href after successful login. Modify the form configuration: add a hidden input field to the form element of lay-filter="login", with the name "redirect" and the value being the target page address.

How to implement front-end and back-end interaction in layui How to implement front-end and back-end interaction in layui Apr 01, 2024 pm 11:33 PM

There are the following methods for front-end and back-end interaction using layui: $.ajax method: Simplify asynchronous HTTP requests. Custom request object: allows sending custom requests. Form control: handles form submission and data validation. Upload control: easily implement file upload.

What is the role of Serverlet in Java What is the role of Serverlet in Java Apr 12, 2024 pm 02:39 PM

Servlet serves as a bridge for client-server communication in Java Web applications and is responsible for: processing client requests; generating HTTP responses; dynamically generating Web content; responding to customer interactions; managing HTTP session state; and providing security protection.

How to build a single-page application using PHP How to build a single-page application using PHP May 04, 2024 pm 06:21 PM

Steps to build a single-page application (SPA) using PHP: Create a PHP file and load Vue.js. Define a Vue instance and create an HTML interface containing text input and output text. Create a JavaScript framework file containing Vue components. Include JavaScript framework files into PHP files.

The difference between event and $event in vue The difference between event and $event in vue May 08, 2024 pm 04:42 PM

In Vue.js, event is a native JavaScript event triggered by the browser, while $event is a Vue-specific abstract event object used in Vue components. It is generally more convenient to use $event because it is formatted and enhanced to support data binding. Use event when you need to access specific functionality of the native event object.

What are the application scenarios of Java Servlet? What are the application scenarios of Java Servlet? Apr 17, 2024 am 08:21 AM

JavaServlet can be used for: 1. Dynamic content generation; 2. Data access and processing; 3. Form processing; 4. File upload; 5. Session management; 6. Filter. Example: Create a FormSubmitServlet to handle form submission, taking name and email as parameters, and redirecting to success.jsp.

What scenarios can event modifiers in vue be used for? What scenarios can event modifiers in vue be used for? May 09, 2024 pm 02:33 PM

Vue.js event modifiers are used to add specific behaviors, including: preventing default behavior (.prevent) stopping event bubbling (.stop) one-time event (.once) capturing event (.capture) passive event listening (.passive) Adaptive modifier (.self)Key modifier (.key)

See all articles