Go &引用;声明但未使用;变量输入为';s条件表达式
我的直觉方法: 但它不起作用Go &引用;声明但未使用;变量输入为';s条件表达式,go,Go,我的直觉方法: 但它不起作用 您可以分享一些替代方法吗?您正在声明一个不使用的变量(moreline)。这里有两个选项:用下划线替换moreline,这意味着可以忽略返回值 for moreline { line, _, err := bio.ReadLine() if err != nil { log.Fatal(err) } fmt.Println(line) } 但更好的选择是使用ReadS
您可以分享一些替代方法吗?您正在声明一个不使用的变量(
moreline
)。这里有两个选项:用下划线替换moreline
,这意味着可以忽略返回值
for moreline {
line, _, err := bio.ReadLine()
if err != nil {
log.Fatal(err)
}
fmt.Println(line)
}
但更好的选择是使用ReadScanner
,ReadBytes('\n')
或ReadString('\n')
检查bufio.go
文件这是对ReadLine
方法的描述:
ReadLine是一种低级的行读取原语。大多数来电者应该
请改用ReadBytes(“\n”)或ReadString(“\n”)或使用扫描仪
在ReadLine
之后调用UnreadByte
将始终未读取读取的最后一个字节(可能是属于行尾的字符),即使该字节不是ReadLine
返回的行的一部分ReadLine
要么返回一个非零行,要么返回一个错误,两者都不能
因此,这将是一个更好的选择:
scanner := bufio.NewScanner(bio)
for scanner.Scan() {
line := scanner.Text()
fmt.Printf("%v\n", line)
}
您可以使用
:=
,它会丢弃变量之前的内容。在该范围内不使用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)
}
}
如果不需要变量,请使用下划线复制。有一个很好的解释为什么go语言创建者添加了这个检查。