Go语言 为什么fmt.fscan不能将小写字母读为字节值?

gorkyyrv  于 2023-03-16  发布在  Go
关注(0)|答案(1)|浏览(112)

代码如下:

package main

import (
    "bufio"
    "fmt"
    "strings"
)

func main() {
    reader := bufio.NewReader(strings.NewReader("a" +
        "2" +
        "3"))
    var a byte
    fmt.Fscan(reader, &a)
    fmt.Println(a)
}

它将输出0
但如果我把输入改成这个

package main

import (
    "bufio"
    "fmt"
    "strings"
)

func main() {
    reader := bufio.NewReader(strings.NewReader("1" +
        "2" +
        "3"))
    var a byte
    fmt.Fscan(reader, &a)
    fmt.Println(a)
}

输出为:

我将输入从a\n2\n3更改为1\n2\n3。导致a无法扫描到值。
我不知道为什么,谁能给我解释一下?谢谢。

06odsfpq

06odsfpq1#

fmt.Fscan检查输入参数的类型以驱动其解析行为。在本例中,唯一的输入参数是byte类型,它是uint8的内置类型别名(链接),这使得fmt.Fscan尝试从输入io.Reader中解析出无符号数(链接). 123可以成功地解析为无符号数字,而a23不能。fmt.Fscan确实有成功扫描的项目数的返回值和一个错误,您将丢弃该错误。如果您将错误打印出来,这样更容易发现问题。
如果您的目标是逐字节读取某些输入,则可以直接使用io.ReaderRead

相关问题