首頁 > 後端開發 > Golang > 為什麼 Go 的 `bufio.Reader.ReadString` 保留前導分隔符,以及如何避免此問題?

為什麼 Go 的 `bufio.Reader.ReadString` 保留前導分隔符,以及如何避免此問題?

Susan Sarandon
發布: 2024-12-18 05:10:11
原創
282 人瀏覽過

Why Does Go's `bufio.Reader.ReadString` Preserve Leading Delimiters, and How Can I Avoid This Issue?

Reader.ReadString 可以保留前導分隔符號

在Go 中,bufio.Reader.ReadString 的行為在解析輸入時可能有所不同。考慮以下場景:

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

func main() {
    reader := bufio.NewReader(os.Stdin)
    fmt.Print("Who are you? Enter your name: ")
    text, _ := reader.ReadString('\n')
    if text == "Alice" || text == "Bob" {
        fmt.Printf("Hello, ", text)
    } else {
        fmt.Printf("You're not allowed in here!")
    }
}
登入後複製

這裡,ReadString 用於讀取使用者輸入,並期望名稱以換行符號結尾。但是,當輸入的名稱與“Alice”或“Bob”相符時,程式會錯誤地拒絕存取。

原因和解決方案

出現此問題的原因是 ReadString 保留了前導事件分隔符號(在本例中為「n」)。當輸入像“Alice”這樣的名稱時,儲存在文字中的字串包括“Alice”和尾隨換行符。這個額外的換行符會阻止字串比較與預期值相符。

要解決此問題,請考慮以下方法:

  1. 修剪前導空格:之前將文字與「Alice」或「Bob」進行比較,使用strings.TrimSpace(text) 刪除任何前導空格,包括換行符
  2. 使用ReadLine取代: 或者,切換到 reader.ReadLine() 而不是 ReadString。此函數傳回不包含任何前導或尾隨分隔符號的輸入。請注意 reader.ReadLine() 將傳回位元組;因此,使用 string(bytes).
將其轉換為字串

以上是為什麼 Go 的 `bufio.Reader.ReadString` 保留前導分隔符,以及如何避免此問題?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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