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)
}

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)
}
}
- 2 回答
- 0 關注
- 167 瀏覽
添加回答
舉報