登录
首页 >  Golang >  Go问答

为什么对 ReadString() 方法的结果进行切割会产生不正常的输出?

来源:stackoverflow

时间:2024-03-19 16:00:34 235浏览 收藏

**文章首段摘要** 本文探讨了在 Go 语言中使用 `bufio.ReadString()` 方法获取用户输入时遇到的一个问题。当对方法返回的结果进行切片操作时,输出会出现异常,即仅输出部分输入并带有双引号。本文分析了造成该问题的根本原因,解释了在 Windows 系统下输入中存在回车符 (`\r`) 和换行符 (`\n`) 的区别,以及如何导致输出的异常行为。

问题内容

package main

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

func main() {
    reader := bufio.newreader(os.stdin)

    fmt.printf("input: ")
    input, _ := reader.readstring('\n')

    fmt.println("thing\n"[:5] + "\"")
    fmt.println(input[:len(input)-1] + "\"")

    return
}

运行代码:

Input: thing
thing"
"hing

为什么第二个串联的行为很奇怪?假设 readstring() 操作返回一个末尾带有换行符的字符串,它应该产生相同的结果。请解释一下这里发生了什么。


解决方案


那是因为您可能使用的是 Windows。

您从键盘进行的实际输入不是 thing\n 而是 thing\r\n

因此,当您执行 fmt.Println(input[:len(input)-1] + "\"") 时,它只会截断最新的 \n 并留下 \r

因此,终端打印 thing,然后到达 \r,将回车符返回到字符串的开头,然后打印双引号。但回车现在位于第一个位置,它有效地覆盖了该行的第一个字符,留下 "hining

以上就是《为什么对 ReadString() 方法的结果进行切割会产生不正常的输出?》的详细内容,更多关于的资料请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>