Golang中的Reader如何自动迭代循环?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Golang中的Reader如何自动迭代循环?相关的知识,希望对你有一定的参考价值。
我正在阅读如何在Golang中使用CSV并遇到此代码:
csvFile, _ := os.Open("people.csv")
reader := csv.NewReader(bufio.NewReader(csvFile))
var people []Person
for {
line, error := reader.Read()
if error == io.EOF {
break
} else if error != nil {
log.Fatal(error)
}
people = append(people, Person{
Firstname: line[0],
Lastname: line[1],
})
}
位于:https://www.thepolyglotdeveloper.com/2017/03/parse-csv-data-go-programming-language/
我觉得这里令人困惑的是无限的for循环,每次迭代抓住下一行但是没有lineNum++
类型逻辑被传递到Reader。读者如何知道它的哪个迭代?我怎么能改变这个?例如。抓住第一线。
答案
Golang中的Reader如何自动迭代循环?读者如何知道它的哪个迭代?
Read方法通过从底层io.Reader中消耗更多数据来返回下一条记录。当底层读取器中没有更多记录时,Read方法返回io.EOF。
应用程序负责在循环中调用read,如示例所示。
Reader不需要知道读取下一条记录的行号,但Reader确实在其内部状态中维护line counter以注释错误。
如果应用程序需要知道行号,则应用程序可以声明计数器并在每次读取时递增计数器。
我怎么能改变这个?例如。抓住第一线。
呼叫一次阅读:
f, err := os.Open("people.csv")
if err != nil {
// handle error
}
defer f.Close()
r := csv.NewReader(f)
firstLine, err := r.Read()
if err != nil {
// handle error
}
以上是关于Golang中的Reader如何自动迭代循环?的主要内容,如果未能解决你的问题,请参考以下文章