【发布时间】:2018-11-05 20:34:26
【问题描述】:
我试图用一个 for 循环逐行读取 Golang 中的 CSV 文件,该循环需要一个带中断的 if 语句来查看读取文件的错误是否为 EOF。例如,当我可以在 java 中读取 while 循环中的行并同时检查 EOF 错误时,我发现这种语法是不必要的。我认为在 for 循环中声明变量是可能的,并且我确信您可以使用 Golang 中的 if 语句来做到这一点。正在做:
if v := 2; v > 1{
fmt.Println("2 is better than 1")
}
我这里的第一个 sn-p 代码是我知道在我的程序中工作的代码。
reader := csv.NewReader(some_file)
for {
line, err := reader.Read()
if err == io.EOF {
break
}
//do data parsing from your line here
}
我不知道第二个 sn-p 在概念上是可能的还是在语法上是不正确的。
reader := csv.NewReader(some_file)
for line, err := reader.Read(); err != io.EOF {
//do data parsing from your line here
}
想要一些澄清/好处/约定以一种方式而不是另一种方式,谢谢:)
【问题讨论】:
-
你试过了吗? for 循环是通用的。不过,您需要一个额外的
;。 -
第二个版本不是 Go。大多数人会编写第一个代码的变体。
-
你的意思是这样的?:play.golang.org/p/Uly1buDNXCF -- 当然,如果你写一个有效的 for 语句是可能的,这是否有用是有争议的。
-
是的,这是可能的。您必须重复读取调用:play.golang.org/p/Uc51FFTBM_9。不过,我看不出这比您的第一个版本好多少。多条短线比一条长线更可取,更重要的是,错误处理不完整(忽略 EOF 以外的任何错误)。
标签: for-loop go coding-style