"声明但未使用" for for for条件表达式

时间:2016-01-13 11:49:12

标签: go

我的直观方法: https://play.golang.org/p/6xzg7TK1IH

并且它不起作用。

你能分享一些替代方法吗?

2 个答案:

答案 0 :(得分:2)

您正在声明一个不使用它的变量(moreline)。这里有两个选项:要么用下划线替换moreline,这意味着你可以省略返回值。

for moreline {
        line, _, err := bio.ReadLine()
        if err != nil {
                log.Fatal(err)
        }
        fmt.Println(line)
}

但更好的选择是使用ReadScannerReadBytes('\n')ReadString('\n')

检查bufio.go文件,这是ReadLine方法的描述:

  

ReadLine是一个低级读取线的原语。大多数来电者应该   请改用ReadBytes('\ n')或ReadString('\ n')或使用扫描仪。

UnreadByte之后调用ReadLine将始终读取读取的最后一个字节(可能是属于行结尾的字符),即使该字节不是ReadLine返回的行的一部分。 ReadLine要么返回非零行,要么返回错误,而不是两者。

所以这是一个更好的选择:

scanner := bufio.NewScanner(bio)

for scanner.Scan() {
    line := scanner.Text()
    fmt.Printf("%v\n", line)
}

答案 1 :(得分:1)

使用:=会丢弃变量的先前内容。您不在该范围内使用morelines,因此出现错误消息。

如果您事先声明了变量并且未使用:=,那么它可以正常工作。函数ReadLine()可能无法完成您认为应该执行的操作。

package main

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

func main() {
    bio := bufio.NewReader(os.Stdin)
    var line []byte
    var err error
    moreline := true
    for moreline {
        line, moreline, err = bio.ReadLine()
        if err != nil {
            log.Fatal(err)
        }
        fmt.Println(line)
    }
}