为了账号安全,请及时绑定邮箱和手机立即绑定

for条件表达式中的“已声明但未使用”变量

for条件表达式中的“已声明但未使用”变量

Go
HUWWW 2021-12-07 10:18:23
我的直觉方法:https : //play.golang.org/p/6xzg7TK1IH它不起作用。你能分享一些替代方法吗?
查看完整描述

2 回答

?
慕标琳琳

TA贡献1830条经验 获得超9个赞

您正在声明一个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') 来代替或使用 Scanner。


调用UnreadByteafterReadLine将始终未读取读取的最后一个字节(可能是属于行尾的字符),即使该字节不是ReadLine. ReadLine要么返回非零行,要么返回错误,永远不会两者兼而有之。


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


scanner := bufio.NewScanner(bio)


for scanner.Scan() {

    line := scanner.Text()

    fmt.Printf("%v\n", line)

}


查看完整回答
反对 回复 2021-12-07
?
慕森王

TA贡献1777条经验 获得超3个赞

您使用:=which 丢弃变量的先前内容。您不在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)

    }

}


查看完整回答
反对 回复 2021-12-07
  • 2 回答
  • 0 关注
  • 143 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信