Golang for 循环不会停止

标签 go

所以我开始学习 Go 编程语言,并希望有人能够阐明为什么我会得到我得到的结果。我试图让程序从用户那里读取输入并将其显示回来,直到用户只输入换行符。 包主

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

func main(){

    inputBuff := bufio.NewReader(os.Stdin)
    line,_ := inputBuff.ReadString('\n')

    for  (!strings.EqualFold(line,"\n")){
        line,err := inputBuff.ReadString('\n')
        if err!=nil {
            fmt.Println(err)
        }
        fmt.Println(line)
        fmt.Println(!strings.EqualFold(line,"\n"))
    }

}

我试图一次读取完整的字符串,所以我认为 bufio 比使用 Scan 会更好。我添加了最后一个打印以显示该方法返回 false 但循环继续执行。任何帮助将不胜感激。

最佳答案

循环内的 line 与您为检查启动的 line 不同。傅立叶:

package main

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

func main(){

    inputBuff := bufio.NewReader(os.Stdin)
    line,_ := inputBuff.ReadString('\n')
    var err error
    for  (!strings.EqualFold(line,"\n")){
        line,err = inputBuff.ReadString('\n')
        if err!=nil {
            fmt.Println(err)
        }
        fmt.Println(line)
        fmt.Println(!strings.EqualFold(line,"\n"))
    }

您在循环内使用了 := 赋值运算符,如 line, err := .... 中。 这使得 Go 在 for 循环中创建一个名为 line 的新符号。但是 for 的检查在循环代码块的内部范围之外。所以它指的是在循环外启动的旧

将循环内的运算符更改为=不会创建新变量,但也不会初始化err,所以我也预先定义了它。 err 可以在循环内声明,但这是多余的。

关于Golang for 循环不会停止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21521709/

相关文章:

go - 如何部署一个 go web 应用程序

go - 如何在 GORM 中定义日期

unit-testing - 使用 aetest.NewContext 代替 endpoints.NewContext 以强一致性测试 go-endpoints

Golang 时间解析问题

c - C write call 和 Go syscall.Write 的区别

go - 如何管理使用 Win32 API(记事本、Word、Outlook、Chrome 等)打开的应用程序窗口

go - golang regexp.matchString 有什么问题吗?

go - 如何从应用程序调用谷歌云身份API

go - 在包中定义共享变量 - go

go - 将结构保存到二进制文件