亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

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 關注
  • 167 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號