首頁 >後端開發 >Golang >輸出時如何取得輸入?

輸出時如何取得輸入?

WBOY
WBOY轉載
2024-02-09 12:30:19672瀏覽

輸出時如何取得輸入?

php小編蘋果今天來介紹一個常見的問題給大家:在PHP中,當我們需要取得使用者的輸入時,我們該如何進行輸出呢?取得使用者的輸入是編寫互動式程式的重要環節,因此掌握正確的方法十分重要。在PHP中,我們可以使用一些內建的函數來取得使用者的輸入,例如使用`fgets()`函數從標準輸入讀取使用者輸入的一行內容,或是使用`fgetc()`函數從標準輸入中讀取取一個字元。當然,我們也可以使用`$_GET`或`$_POST`超全域變數來取得使用者透過表單提交的資料。無論是使用哪種方法,都需要注意對使用者輸入進行必要的驗證和過濾,以確保程式的安全性和穩定性。希望以上介紹能幫助大家!

問題內容

我想要實現的是某種應用程序,它將大量資訊記錄到控制台(例如,從0 到1000000000000 的數字),並且能夠通過在控制台中鍵入命令來停止執行(例如“停止”)。

我想到了使用 goroutine 的想法,但是,我無法輸入命令,因為輸入欄位正在更改為輸出。

這是我的程式碼:

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()
}

以及我得到的結果。字母是我嘗試輸入的輸入,數字是應用程式的輸出

關於如何在我的 go 應用程式中進行正確的輸入/輸出有什麼建議嗎?

解決方法

我無法輸入命令,因為輸入欄位正在更改為輸出

您可以正常輸入指令。當您鍵入它們時,它們會回顯到您的控制台。這將與輸出到控制台的其他所有內容結合在一起,這可能會讓用戶感到困惑 - 但不會讓電腦感到困惑。

假設這實際上與您的作業系統匹配,您的程式運行得很好:

if text == "stop\r\n" {

在我的作業系統上沒有 \r。更方便的方法是使用 strings.trimspace 刪除所有空格。

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

透過此更改,程式碼對我有用。正如您所說,輸出和輸入被插入到螢幕上,但您仍然可以輸入 stop 並結束程式。

關於如何在我的 go 應用程式中進行正確的輸入/輸出有什麼建議嗎?

現實世界中幾乎沒有終端程式是互動的。相反,命令列參數和環境變數在呼叫時提供其配置。 shell 重定向通常用於保留(在檔案中)或分頁(例如 |less)程式的任何長輸出。

您會看到很多使用互動式終端模型的學術編程,其中程式提示使用者並收集數據,但在現實世界中這種情況非常罕見,並且通常是一種不明智的複雜化。標準輸入通常用於提供計算所需的資料輸入,而不是使用者命令(例如要操作或過濾的資料)。

正如 @tinkerer 所建議的,訊號已經可以用來終止你的程式(詳細資料是特定於作業系統的)。因此,實際上無需擔心終端應用程式如何處理標準輸入和輸出的可視化表示,而這些標準輸入和輸出的插值只是為了終止程式。在 posix 環境中還有許多其他訊號,其中一些訊號完全面向使用者並且可以用於任意目的。

一旦執行時需要更複雜的使用者輸入,程式通常會在套接字上偵聽命令。對於此類程序,由於簡單性和可訪問性,提供 http 服務的 web 介面變得越來越普遍。

以上是輸出時如何取得輸入?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:stackoverflow.com。如有侵權,請聯絡admin@php.cn刪除