douyong1908 2019-06-18 16:03
浏览 916
已采纳

在Golang中访问for循环之外的变量

I'm trying to read a CSV file to store the values in a variable. However, I couldn't access the variables outside of the for loop

func GetKeys(filename string) {
    var record []string
    var err error
    file, err := os.Open(filename)
    if err != nil {
        log.Fatal(err)
    }
    defer file.Close()
    // Create a new reader.
    reader := csv.NewReader(bufio.NewReader(file))
    for {
        record, err = reader.Read()
        // Stop at EOF.
        if err == io.EOF {
            break
        }
        fmt.Printf("%v", record) // works fine
        fmt.Printf("%v
", record[0]) // works fine too
    }
    fmt.Printf("%v
", record) // returns empty slice
}

func main() {
    GetKeys("credentials.csv")
}
  • 写回答

1条回答 默认 最新

  • ds355020 2019-06-18 16:09
    关注

    Your loop breaks when reader.Read() returns io.EOF. This happens when your input is consumed.

    At the same time (when io.EOF is returned), the returned record will be nil. Reader.Read():

    If there is no data left to be read, Read returns nil, io.EOF.

    So you assign nil to the record variable, the loop breaks, and you inspect the record variable.

    If your intent is to hold the last record, store it in a separate variable, and do not "overwrite" it with the last nil record:

    var lastRecord []string
    for {
        record, err = reader.Read()
        // Stop at EOF.
        if err == io.EOF {
            break
        }
        lastRecord = record
        fmt.Printf("%v", record) // works fine
        fmt.Printf("%v
    ", record[0]) // works fine too
    }
    fmt.Printf("%v
    ", lastRecord) // this will be the last non-nil record
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 SPSS分类模型实训题步骤
  • ¥15 求解决扩散模型代码问题
  • ¥15 工创大赛太阳能电动车项目零基础要学什么
  • ¥20 limma多组间分析最终p值只有一个
  • ¥15 nopCommerce开发问题
  • ¥15 torch.multiprocessing.spawn.ProcessExitedException: process 1 terminated with signal SIGKILL
  • ¥15 QuartusⅡ15.0编译项目后,output_files中的.jdi、.sld、.sof不更新怎么解决
  • ¥15 pycharm输出和导师的一样,但是标红
  • ¥15 想问问富文本拿到的html怎么转成docx的
  • ¥15 我看了您的文章,遇到了个问题。