【问题标题】:Golang one line for loopGolang 一行 for 循环
【发布时间】: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


【解决方案1】:

这是编写简单语句而不是冗长复杂语句的传统方式,不是吗?

所以,我认为第一个版本比第二个版本更传统。此外,您的第二个版本中的 for 循环方式不正确。如果您想使用它,请按照以下方式或您希望的任何方式对其进行修复:

for line, err := reader.Read(); err != io.EOF; line, err = reader.Read() {
    //do data parsing from your line here
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-09
    • 2022-01-26
    • 1970-01-01
    • 2022-01-22
    相关资源
    最近更新 更多