首頁 > 後端開發 > Golang > 為什麼我的 Go `reader.ReadString` 函數無法正確處理使用者輸入?

為什麼我的 Go `reader.ReadString` 函數無法正確處理使用者輸入?

DDD
發布: 2024-12-14 03:21:10
原創
663 人瀏覽過

Why is my Go `reader.ReadString` function not correctly processing user input?

Go 中「reader.ReadString」問題排查

在Go 中,bufio.Reader 提供了ReadString 方法來從流,在指定方法來從流的分隔符號處停止。但是,當使用此方法檢索使用者輸入時,有時會發現第一次出現的分隔符號並未從傳回的字串中刪除。

請考慮以下程式碼:

package main

import (
    "bufio"
    "fmt"
    "os"
)

func main() {
    reader := bufio.NewReader(os.Stdin)
    fmt.Print("Who are you? \nEnter your name: ")
    text, _ := reader.ReadString('\n')
    if aliceOrBob(text) {
        fmt.Printf("Hello, ", text)
    } else {
        fmt.Printf("You're not allowed in here! Get OUT!!")
    }
}

func aliceOrBob(text string) bool {
    if text == "Alice" {
        return true
    } else if text == "Bob" {
        return true
    } else {
        return false
    }
}
登入後複製

當這個程式運行時,它會提示使用者輸入他們的名字,但即使使用者輸入“Alice”或“Bob”,程式也會錯誤地印出「You're not allowed in this!」滾出去! ! 」。

問題在於ReadString 方法會讀取輸入行,直到遇到指定的分隔符號。但是,在其預設行為中,它不會從返回的字串中刪除分隔符號。這意味著當使用者輸入“Alice”時,文字的值實際上是“Alicen”,它與aliceOrBob 函數中的任何名稱都不匹配。 aliceOrBob 函數中檢查文字之前從文字中刪除換行符:

或者,可以使用ReadLine 方法而不是ReadString 從os.Stdin 讀取一行輸入。不帶換行符。需要一個字串,因此需要使用字串函數將位元組切片轉換為字串:
import (
    ....
    "strings"
    ....
)

...
if aliceOrBob(strings.TrimSpace(text)) {
...
登入後複製

以上是為什麼我的 Go `reader.ReadString` 函數無法正確處理使用者輸入?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板